将BSTR从C++传递到C#
Pass BSTR from C++ to C#
我有C#项目"X",我在其中向C++项目"Y"公开了方法。
X的方法签名如下-
public void WriteInformation(string sInfo)
{
m_logger.ErrorInfo("{0}", sInfo);
}
当我使用.TLB文件将其导出到C++时,我检查了.tlh文件中该方法的声明,该文件在.TLB文件的#import中生成。
virtual HRESULT __stdcall WriteInformation ( /*[in]*/ BSTR sMsg ) = 0;
我在C++项目中调用这个方法,并传递如下参数-
oLog->WriteInformation(BSTR("Info write successful"));
这里的问题是,从C++传递的字符串总是变成垃圾或null,我调试了它,我可以看到sInfo的值总是垃圾或null。
请告诉我应该使用什么方法将字符串从C++传递到C#。
您尝试传递ANSI字符串来代替BSTR。BSTR必须是宽字符串。此外,您不应该传递字符串文字,您应该使用SysAllocString()
(或者更好的是)像ATL::CComBSTR
或_bstr_t
这样的包装类来正确分配BSTR。Btw _bstr_t
有一个构造函数,它将接受const char*
并为您执行ANSI->UTF16转换。
我认为不可能直接与C++和C#交互。我使用C++/CLI包装器进行了交互。
相关文章:
- 随机字符,从强制转换 Arduino 字符串到 Excel BSTR 通过 c++ DLL
- 如何将 CComVariant bstr 转换为 CString
- 如何使用消息框函数显示 BSTR 值
- 如何解决此错误(将WCHAR_T转换为BSTR)
- 如何序列化变体或 BSTR
- C++函数返回无法调用 SysFreeString() 的函数的 BSTR
- 从 VBA 中的 (c++ BSTR) 字符串中删除 chr(0)
- 如何返回包含来自com dll的多个空字符的BSTR
- BSTR到WSTRING的内存泄漏
- 用于unordered_set<BSTR>的 Hash & EqualTo 函数
- 我可以在输入BSTR变体上调用variantChangeType吗?
- C++用于连接两个 Bstr 字符串的代码
- 将 BSTR 转换为 BYTE 数组C++
- 如何在Visual C 中的BSTR和32位Unicode字符串之间进行转换
- 将 BSTR 转换为 CString 时出错
- 如何在Visual Studio C++2010中将BSTR转换为std::string
- C++ STL 地图:BSTR 的问题
- BSTR 中有 Unicode 符号吗?
- 将BSTR HEXA小数线转换为C 中的字节 *
- 为什么BSTR以及如何将其转换为QString