将C ++创建的DLL导入C#时,我遇到了一般性问题。
1)我编写了C ++函数,使用指针,如双指针,指针数组等。
例如static int someFunc(char *var[])
我如何重用它们,因为C#不支持指针。
2)我是否需要通过C#中的[DllImport()]公开所有函数?即我有一个名为someFunc的函数,它在内部调用其他函数。我是否应该在'DllImport'
下公开这些功能3)任何人都可以解释为什么我需要在C#中处理非托管代码,特别是当我从C ++导入dll时?
答案 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。)