一、简述
在C#中调用C++版的dll函数时,因为是不同的语言,参数类型也不尽相同,需要做一些转换。因为在网上能找到的答案也是很杂乱,对此不懂的人会搞到发狂。最近碰到一些项目需要在C#中调用C++版dll,所以一通捣鼓,总结了部分经验。【提示:C#调用C++库,需要dll和lib就可以了,不需要头文件】
二、亲测有效的一些参数类型转换
1、基本类型int、float、bool,C++中与C#中是相同的;
(1)C++ dll 函数
void init(int a, float b, bool c);
(2)C#中声明C++ dll中的函数
[System.Runtime.InteropServices.DllImport("TEST_DLL")]
public static extern void init(int a, float b, bool c);
注意:TEST_DLL是C++ dll的名称。
(3)C#中调用C++ dll 中的函数
int a = 1;
float b = 2.0f;
bool c = false;
init(a, b, c);
注意:传入参数前先初始化。
2、基本类型参数引用
(1)C++ dll 函数
void init(int &a, float &b, bool &c);
(2)C#中声明C++ dll中的函数
[System.Runtime.InteropServices.DllImport("TEST_DLL")]
public static extern void init(ref int a, ref float b, ref bool c);
注意:TEST_DLL是C++ dll的名称。
(3)C#中调用C++ dll 中的函数
int a = 1;
float b = 2.0f;
bool c = false;
init(ref a, ref b, ref c);
注意:传入参数前先初始化。
3、基本类型参数默认值
(1)C++ dll 函数
void init(int a = 10);
(2)C#中声明C++ dll中的函数
[System.Runtime.InteropServices.DllImport("TEST_DLL")]
public static extern void init(int a = 10);
注意:TEST_DLL是C++ dll的名称。
(3)C#中调用C++ dll 中的函数
int a = 1;
init(a);
4、C++ char*字符串(传入)--> C# string
(1)C++ dll 函数
void init(char* imgPath);
</