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

时间:2012-06-14 10:27:18

标签: c# c++ dllimport

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

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

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

下公开这些功能

3)任何人都可以解释为什么我需要在C#中处理非托管代码,特别是当我从C ++导入dll时?

2 个答案:

答案 0 :(得分:1)

第1点答案: 在C#

中的函数声明中使用unsafe关键字
static unsafe int someFunc(char* var[]);

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

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

答案 1 :(得分:0)

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

但是,正确的做法是使用marshaling自动将char *转换为System.String,反之亦然。 (并translate an array of char* to an array of strings。)