C++打包DLL在C#中调用
2016-07-12 12:44
417 查看
很多时候我们都会遇到不同语言相互调用的情况,如在C#中调用C++的代码。
新建C++项目
在VS中新建C++Win32控制台应用程序,命名为ExportDllTest。
新建完成后会出现ExportDLLTest.h和ExportDllTest.cpp两个文件,在ExportDllTest.h中我们可以声明需要导出的dll中包含的函数,在ExportDllTest.cpp中进行实现。
删除ExportDllTest.h中原有代码片段,输入如下代码
在ExportDllTest.cpp中对Add函数进行实现
配置项目属性
在C/C++选项的高级设置中,设置编译为C++代码
编译打包dll文件
设置完成后进行项目生成,编译(必须先生成项目再编译才能成功,否则无法获得dll文件)
至此可以在该项目所在的文件夹中找到编译得到的dll文件。
新建C#项目
新建C#的控制台应用程序,命名为ImportDllTest。
设置C++编译过程中对应平台。
使用DLLImport导入dll包
输入如下代码,通过DLLImport引用dll中的函数
将C++的dll文件拷贝到C#的bin目录下,拷贝到相应的文件中,如x64平台下的Debug中或Release中。
点击启动,得到运行结果。
此方法为静态调用dll文件的相关方法,关于动态调用dll的方法在后续进行更新,敬请期待。
在调用C++中dll文件函数时,需要了解C++和C#中数据类型的对应关系,然后将不同类型相互对应来调用。
新建C++项目
在VS中新建C++Win32控制台应用程序,命名为ExportDllTest。
新建完成后会出现ExportDLLTest.h和ExportDllTest.cpp两个文件,在ExportDllTest.h中我们可以声明需要导出的dll中包含的函数,在ExportDllTest.cpp中进行实现。
删除ExportDllTest.h中原有代码片段,输入如下代码
#define EXPORTDLLTEST_API __declspec(dllexport) EXTERN_C EXPORTDLLTEST_API int __stdcall Add(int a, int b); //可以不用宏定义,直接将EXPORTDLLTEST_API替换为__declspec(dllexport) //EXTERN_C也可替换为 extern "C"
在ExportDllTest.cpp中对Add函数进行实现
#include "stdafx.h" #include "ExportDllTest.h" EXPORTDLLTEST_API int __stdcall Add(int a, int b) { return a + b; }
配置项目属性
在C/C++选项的高级设置中,设置编译为C++代码
编译打包dll文件
设置完成后进行项目生成,编译(必须先生成项目再编译才能成功,否则无法获得dll文件)
至此可以在该项目所在的文件夹中找到编译得到的dll文件。
新建C#项目
新建C#的控制台应用程序,命名为ImportDllTest。
设置C++编译过程中对应平台。
使用DLLImport导入dll包
输入如下代码,通过DLLImport引用dll中的函数
using System.Linq; using System.Runtime.InteropServices; using System.Text; using System.Threading.Tasks; namespace ImportDllTest { class Program { [DllImport("ExportDllTest.dll", CallingConvention = CallingConvention.StdCall, EntryPoint = "Add")] extern static int Add(int a, int b); static void Main(string[] args) { Console.WriteLine(Add(1, 2)); Console.Read(); } } }
将C++的dll文件拷贝到C#的bin目录下,拷贝到相应的文件中,如x64平台下的Debug中或Release中。
点击启动,得到运行结果。
此方法为静态调用dll文件的相关方法,关于动态调用dll的方法在后续进行更新,敬请期待。
在调用C++中dll文件函数时,需要了解C++和C#中数据类型的对应关系,然后将不同类型相互对应来调用。
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- 关于指针的一些事情
- c#调用COM组件
- FREEBASIC 编译可被python调用的dll函数示例
- c++ primer 第五版 笔记前言
- share_ptr的几个注意点
- C#实现把指定数据写入串口
- C#动态创建button的方法
- C#中抽象方法与虚拟方法的区别
- c#中虚函数的相关使用方法
- C#实现给图片加水印的方法
- C#使用加边法计算行列式的值
- C#实现多线程的同步方法实例分析
- C#中尾递归的使用、优化及编译器优化
- DLL(Dynamic Linkable Library) 详解说明
- C#中的delegate委托类型基本学习教程
- C#实现子窗体与父窗体通信方法实例总结
- C#通用邮件发送类分享
- 举例讲解C#中自动实现的属性