栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > .Net

VS2017中C#调用托管C++写的DLL

.Net 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

VS2017中C#调用托管C++写的DLL

一、C#调用DLL的方式

C++写的DLL有托管的DLL和非托管的DLL。

托管代码的对象在托管堆上分配内存,创建的对象由虚拟机托管。C#是典型的托管代码语言。

而非托管的代码对象有实际的内存地址,创建的对象必须要自己来管理和释放。如C和C++里的new、delete。

(一)调用非托管的DLL,主要采用静态方法调用:

[DllImport(“”)]

但这种方式好像只能调用DLL中的方法,不能调用类。

(二)调用托管的DLL,如果是C#写的托管的dll,由C#来调用应该更简单些。今天记录下C#调用C++写的托管的dll,这个对于初学者来说稍微有点复杂。

二、C#调用托管C++写的dll中的类及其方法

主要由几个步骤:

(一)使用托管C++创建dll

1、使用本地C++创建本地类;

2、添加clr支持;

3、创建托管C++类,以封装本地C++写的类;

4、导出为dll;

(二)C#添加引用并实现调用。

三、使用托管C++创建dll

我用的VS2017,VS2015的话不太一样,但都是可以实现的。

(一)新建项目——选择Visual C++中的Windows桌面向导,项目名为Cplusdll

选择其它的应该也行,但我不会设置别的,这个应该是最简单的,后期设置比较少。

注意这个项目刚新建出来是个Win32,x86的项目,先不要更改成x64的,否则可能会出错,等全部配置完,最后再改成x64就不会报错了。

(二)使用本地C++创建本地类

1、添加dllexport.h头文件

在添加类前,先在头文件中添加一个叫dllexport.h的头文件,内容如下:

注意这个项目名为Cplusdll,是个dll的项目,在这个项目属性中的C/C++中的预处理器的预处理器定义中已经预定义了CPLUSDLL_EXPORTS,所以在这个头文件中的dllexport是亮的。

2、创建本地C++类

 

这里是个本地类。

3、Cplusnative.h文件内容

friend ref class Cplus是等会要创建的托管类,这里还没有创建出来,先不用管。

 

4、Cplusnative.cpp文件内容

(三)添加clr支持

打开项目属性-常规

我上面的平台是x64的,一定要修改成win32,见下图:

否则会导致无法添加托管类。

(四)创建托管C++类,以封装本地C++写的类

添加类

Cplus.h文件内容:

Cplus.cpp文件内容:

(五)导出为dll

直接导出有可能会有这个提示:

需要在dllmain.cpp中添加一段提示:

就加这么一句话,其它的不要改动。然后再导出。

四、C#添加引用并实现调用。

1、添加C#项目

 

控制台也是一样的。

2、添加Cplusdll引用

3、调用

在窗口中添加两个TextBox,两个Button。

双击编写加法和乘法的触发事件:

保存。然后就可以调试运行了,但一定要注意一点:上面的Cplusdll.dll是x86的,所以下面的这个C#也一定要编译成x86的。否则是运行不起来的,即使设置的是Any Cpu也不行。或者两个都编译成x64的也可以,就是必须得两个一致才行。

修改C#项目的属性,并修改C#项目为启动项目

 

再次编译运行,就可以了。

 

下载链接:https://download.csdn.net/download/zhangyajunna/13203213

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/909152.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号