[英]Re-using C++ functions by importing DLL in C#
将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答案:无需导入所有功能。 只导入someFunc()
第3点答案:C#使用托管的代码,该代码是安全类型的,并且指向某些有效的内存位置。 但是,C ++中的指针可能会或可能不会指向任何有效的内存位置。 因此,您需要使用C#处理非托管代码。
C#确实在不安全区域中支持指针,但是,您也可以使用IntPtr,它类似于C ++的void * DllImport,其中IntPtr作为参数或返回值。
但是,正确的做法是使用封送处理将char *自动转换为System.String,反之亦然。 (并将char *数组转换为字符串数组 。)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.