我有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