C#P / Invoke中的元帅C ++"字符串"类
时间:2020-03-06 14:59:12 来源:igfitidea点击:
我在本机DLL中定义了一个函数,如下所示:
#include <string> void SetPath(string path);
我试图将其放在Microsoft的P / Invoke Interop Assistant中,但是它在"字符串"类(我认为它是来自MFC?)上令人窒息。
我曾尝试将其封送为多种不同类型(CString,char [],byte []),但是每次我收到NotSupportedException或者Native Assembly Exception时(取决于我尝试的封送处理方式)。
有人做过使用本机字符串类的本机/托管互操作吗?有什么办法可以做到吗?我需要写我自己的Marshaler吗?
解决方案
看起来我们正在尝试使用C ++标准库字符串类。我怀疑这对元帅是否容易。最好坚持使用char *和Marshal作为StringBuilder。那就是我通常要做的。我们必须添加一个包装器,该包装器会为我们生成C ++字符串。
PInvoke互操作助手仅支持C,不支持C ++。不幸的是,MFC String类(我相信是CString?)是C ++,无法通过助手工作。而是尝试使用以下内容
void SetPath(__in const WCHAR* path);