2011-06-07 46 views
0

我有C#项目“X”,我已经将方法暴露给C++项目“Y”。将BSTR从C++传递到C#

X具有方法签名如下 -

public void WriteInformation(string sInfo) 
{ 
    m_logger.ErrorInfo("{0}", sInfo); 
} 

由于我导出到C++使用我检查在.tlh文件中的此方法,该方法产生对.tlb文件的#进口的声明.TLB文件。

virtual HRESULT __stdcall WriteInformation (/*[in]*/ BSTR sMsg) = 0; 

我打电话C++项目这个方法和passsing参数如下 - 这里

oLog->WriteInformation(BSTR("Info write successful")); 

问题是由C传递的字符串++总是变成垃圾或空,我调试它,我可以看到价值sInfo总是垃圾或null。

请让我知道应该遵循什么方法将字符串从C++传递到C#。

回答

-2

我不认为它可能直接与C++和C#交互。我曾使用C++/CLI包装进行交互。

3

您尝试传递ANSI字符串以代替BSTR。 BSTR必须是宽字符串。你也不应该传递一个字符串文字,你应该使用SysAllocString()(或更好的)包装类如ATL::CComBSTR_bstr_t正确地分配一个BSTR。 Btw _bstr_t有一个构造函数,它将接受const char*并为您执行ANSI-> UTF16转换。

+0

修改oLog-> WriteInformation(BSTR(“Info write successful”)); to oLog-> WriteInformation(_bstr_t(“Info write successful”));解决了这个问题。 – Rahul 2011-06-07 11:18:27

+0

@Rahul:太好了,那就是应该发生的事情。 – sharptooth 2011-06-07 11:19:43