通过在 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时?

通过在 C# 中导入 DLL 来重用C++函数

第 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* 数组转换为字符串数组。