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);