打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
VS2017生成DLL(C语言)文件并在C#中使用

下面我们将在VS2017生成dll文件(动态库文件)和lib文件(静态库文件),这里以C语言为例,用最简单的例子,来让读者了解如何生成dll文件(动态库文件)

第一步:新建一个项目

第二步:选择Windows桌面向导(这里先不要去管上面的“动态链接库(DLL)”)

第三步:选择动态链接库,并空项目打勾√

 第四步:添加一个.c源文件

第五步:(因为这里以C语言为例子,将后缀改为.c)

第六步:在c文件中输入一个简单的函数这里使用了_declspec(dllexport),但_declspec(dllexport)并不是必须的,后面一种方法将不使用_declspec(dllexport)

_declspec(dllexport) int sum(int a, int b){ return a + b;}

第七步:新建一个头文件

第八步:在头文件中输入函数的声明

这里也可以改成下面这样,extern "C" 如果是c语言调用并不需要,加这个是因为c++调用的话,指定c++调用方式和c语言一样. 加这个就是做兼容性的.

#ifndef SHARE_H#define SHARE_H#endif
#ifdef __cplusplus //(内置宏,如果是c++,在编译器预处理的时候加上extern,如果是c语言调用的时候是不处理的)extern "C"{#endif

_declspec (dllexport) int sum(int a, int b);

#ifdef __cplusplus}#endif

第九步:编译

第十步:Debug文件夹下的两个文件DLL.dll和DLL.lib就是我们要使用的两个文件了

因为使用的_declspec(dllexport),虽然这里我们只编译了一次,却生成了dll和lib两个文件

接下来在C# 中使用:首先将上面生成的dll放到C#的目录下,一般是\bin\x86\Debug,(注意下面将之前的DLL.dll改成了Project2.dll,非必须,保持一致就好)。

using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Runtime.InteropServices;using System.Text;using System.Threading.Tasks;using System.Windows.Forms;
namespace WindowsFormsApp12{ public partial class Form1 : Form { public Form1() { InitializeComponent(); }
//[DllImport("Project2.dll", CallingConvention = CallingConvention.Cdecl,EntryPoint = "sum")] [DllImport("Project2.dll", EntryPoint = "sum")] private static extern int sum(int a, int b);

private void button1_Click(object sender, EventArgs e) { MessageBox.Show(sum(10,20).ToString()); } }}

运行后:

托管调试助手 "PInvokeStackImbalance":“对 PInvoke 函数“WindowsFormsApp12!WindowsFormsApp12.Form1::sum”的调用导致堆栈不对称。原因可能是托管的 PInvoke 签名与非托管的目标签名不匹配。请检查 PInvoke 签名的调用约定和参数与非托管的目标签名是否匹配。”

修改如下:(参考https://jingyan.baidu.com/article/d169e1860bb38f436611d8c8.html)

[DllImport("Project2.dll", CallingConvention = CallingConvention.Cdecl,EntryPoint = "sum")]

运行正常:

参考网址:

  1.  https://www.cnblogs.com/lanhaicode/p/10798385.html

  2. https://oomake.com/question/1394538

  3. https://jingyan.baidu.com/article/d169e1860bb38f436611d8c8.html

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
VC 的DLL应用(含Demo演示) - 一点一滴的Beer - 博客园
VS2010产生C的dll方法和C#调用方式
使用VS2015创建 纯C的DLL及其调用
使用 __declspec(dllexport) 从 DLL 导出
VC 动态链接库(DLL)编程深入浅出
如何编写DLL文件(开发环境VS2005)
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服