0

在将 C++ 创建的 DLL 导入 C# 时,我遇到了一些一般性问题。

1) 我编写了使用指针的 C++ 函数,例如双指针、指针数组等。例如static int someFunc(char *var[]) ,我如何重新使用它们,因为 C# 不支持指针。

2) 我需要在 C# 中通过 [DllImport()] 公开所有函数吗?即我有一个名为 someFunc 的函数,它在内部调用其他函数。我是否应该在“DllImport”下也公开这些功能

3) 谁能解释为什么我需要在 C# 中处理非托管代码,尤其是当我从 C++ 导入 dll 时?

4

2 回答 2

1

第 1 点答案:在 C# 中的函数声明中使用 unsafe 关键字

static unsafe int someFunc(char* var[]);

第2点答案:不需要导入所有功能。只导入 someFunc()

第 3 点答案:C# 使用类型安全的托管代码并引用一些有效的内存位置。然而,C++ 中的指针可能引用也可能不引用任何有效的内存位置。所以你需要在 C# 中处理非托管代码。

于 2012-06-14T10:41:29.100 回答
0

C# 确实支持不安全区域中的指针,但是,您也可以使用类似于 C++ 的 void* DllImport 的 IntPtr,并将 IntPtr 作为参数或返回值。

然而,正确的做法是使用封送处理将 char* 自动转换为 System.String,反之亦然。(并将char* 数组转换为字符串数组。)

于 2012-06-14T10:48:44.287 回答