通过在 C# 中导入 DLL 来重用C++函数
本文关键字:C++ 函数 DLL 导入 | 更新日期: 2023-09-27 18:37:14
我在将C++创建的 DLL 导入 C# 时遇到了一般问题。
1)我已经编写了C++函数,使用指针,如双指针,指针数组等。例如 static int someFunc(char *var[])
如何重用它们,因为 C# 不支持指针。
2) 我需要通过 C# 中的 [DllImport()] 公开所有函数吗?即我有一个名为someFunc的函数,它在内部调用其他函数。我是否也应该在"DllImport"下公开这些功能
3)任何人都可以解释为什么我需要在C#中处理非托管代码,尤其是当我从C++导入dll时?
第 1 点答案:在 C# 的函数声明中使用 unsafe 关键字
static unsafe int someFunc(char* var[]);
要点 2 答:无需导入所有函数。只导入一些 Func()
要点3回答:C# 使用类型安全的托管代码,并引用某个有效的内存位置。但是,C++中的指针可能引用也可能不引用任何有效的内存位置。因此,您需要在 C# 中处理非托管代码。
C# 确实支持不安全区域中的指针,但是,您也可以使用 IntPtr 它类似于 C++ void* DllImport,将 IntPtr 作为参数或返回值。
但是,正确的做法是使用封送处理自动将 char* 转换为 System.String,反之亦然。(并将 char* 数组转换为字符串数组。