2011-06-07 149 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