我正在使用 Pinvoke 实现本机(C++)代码和托管(C#)代码之间的互操作性。我想要实现的是从本机代码中获取一些文本到我的托管代码中。为此,我尝试了很多事情,例如通过 ref 传递字符串/字符串生成器,使用 [IN] 和 [OUT],编组到 LPSTR,从函数返回字符串等,但在我的情况下没有任何作用。任何有关一些小代码的帮助将不胜感激。
原文由 Jame 发布,翻译遵循 CC BY-SA 4.0 许可协议
3 回答2k 阅读✓ 已解决
2 回答3.9k 阅读✓ 已解决
2 回答3.2k 阅读✓ 已解决
1 回答3.2k 阅读✓ 已解决
1 回答2.7k 阅读✓ 已解决
3 回答3.4k 阅读
1 回答2.7k 阅读✓ 已解决
我会用
BSTR
因为这意味着您不必为每个字符串调用原生两次,一次获取长度,然后一次获取内容。使用
BSTR
编组器将负责使用正确的内存管理器解除分配BSTR
以便您可以安全地将其从 C++ 代码中传递出去。C++
C#
BSTR
有一个小缺点,即它携带 UTF-16 有效负载,但您的源数据很可能是char*
。为了克服这个问题,您可以像这样结束从
char*
到BSTR
的转换:That’s the hardest one out of the way, and now it’s easy to add other wrappers to convert to
BSTR
fromLPWSTR
,std::string
,std::wstring
等等。