【发布时间】:2014-09-22 13:32:25
【问题描述】:
我有一个注册为 COM 对象的 .net 库,当在 C++ 项目中导入 .tlb 文件时,我得到了这样的方法声明
virtual HRESULT __stdcall GetBid ( /*[in]*/ BSTR symbol, /*[out,retval]*/ double * pRetVal ) = 0;
对于 .NET 等效项
double GetBid(string symbol);
现在我试着这样称呼它
double bid;
ptr->GetBid(_T("AAPL"), &bid);
这不能按预期工作,因为在 .NET 端,字符串参数实际上是一个空字符串。
如果我换成这样的电话
double bid;
ptr->GetBid(_bstr_t("AAPL"), &bid);
一切都按预期进行。
为什么两个调用都编译得很好,但结果却不同?不应该将第一次调用转换为正确的字符串编组吗?
感谢任何有关 BSTR 魔法的幕后信息 :)
【问题讨论】:
-
简单地说,
wchar*C 字符串不是BSTR。 -
是的,但是当我传递给 BSTR 参数时,它不是由隐式运算符转换的。
标签: c# c++ com com-interop