我有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#。
修改oLog-> WriteInformation(BSTR(“Info write successful”)); to oLog-> WriteInformation(_bstr_t(“Info write successful”));解决了这个问题。 – Rahul 2011-06-07 11:18:27
@Rahul:太好了,那就是应该发生的事情。 – sharptooth 2011-06-07 11:19:43