繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM