[問題] C# access C++ COM的疑問

看板C_and_CPP (C/C++)作者時間16年前 (2010/05/29 00:01), 編輯推噓1(104)
留言5則, 3人參與, 最新討論串1/1
這個問題其實我也不知道適不適合波在這邊 因為目前是C# 要存取C++ 但是不曉得為啥 string的方式都不可行 網路上也找不到完整的教學.... 貼在這邊請有經驗的版友給點幫助 謝謝 作者: QQ29 (我愛阿蓉) 看板: C_and_CPP 標題: [問題] C# access C++ COM的疑問 時間: Sat May 29 00:01:10 2010 ※ [本文轉錄自 C_Sharp 看板 #1B_zaxv_ ] 作者: QQ29 (我愛阿蓉) 看板: C_Sharp 標題: [問題] C# access C++ COM的疑問 時間: Fri May 28 22:54:48 2010 是這樣的 我C#想要傳入C++ function幫我new一塊空間然後存取 目前 C# 宣告的interface 是 internal interface MyCOM { void GetHelloString(out string text, out int stringLength); } 我呼叫時 使用 string inputString = null; int stringLength = 0; COMObj.GetHelloString(out inputString, out stringLength); 再來是C++ 的 定義 HRESULT __stdcall COMClass::GetHelloString(LPWSTR* pwszText, int *pnNameLen) { 這邊如果我 *pnNameLen = 5566; 可以成功給int值 可是對於pwszText 因為C#的string 對應的是C++的WCHAR*... 所以我就宣告pointer to pointer=> LPWSTR* C#那邊我也是傳 string的reference (我觀念就類似C++的傳 pointer的address) 這邊我就很簡單的 用 *pwszText = new WCHAR [10]; (*pwszText)[0] = L'C'; (*pwszText)[1] = L'O'; (*pwszText)[2] = L'M'; (*pwszText)[3] = L'\0'; return S_OK; 可是我怎麼樣都無法成功幫這string 給值... } 請問我是不是搞錯了? 另外就是 如果我C++這邊是收一個自訂型態的class or struct... 我C#那邊只要class定義的一樣 可以這樣傳嗎? 現在連string都無法搞定了....也沒辦法try其他的 剛剛在C#寫 char[] p = { 'H','e','l','l','o'}; p[2] = '\0'; Console.WriteLine(p); 竟然印出He lo 奇怪遇到\0不是應該就停了嗎....真的很不解 請教各位 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 123.192.93.10 ※ 編輯: QQ29 來自: 123.192.93.10 (05/28 23:06) -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 123.192.93.10 ※ 編輯: QQ29 來自: 123.192.93.10 (05/29 00:02)

05/29 00:08, , 1F
並不是每個語言的字串都是 null-terminated string。
05/29 00:08, 1F

05/29 00:09, , 2F
C++ 的 std::string 中間也可以包含 \0 的。
05/29 00:09, 2F
※ 編輯: QQ29 來自: 123.192.93.10 (05/29 00:21)

05/29 00:36, , 3F
喔喔謝謝t大c# 才剛摸...不過實在不知道該怎麼去接受C#的type
05/29 00:36, 3F

05/29 00:36, , 4F
我都把它reference type想成 c++的指標 但還是卡在這問題...
05/29 00:36, 4F
※ 編輯: QQ29 來自: 123.192.93.10 (05/29 00:40) ※ 編輯: QQ29 來自: 123.192.93.10 (05/29 00:44)

06/06 10:50, , 5F
Please notice LPCWSTR * and out string .....
06/06 10:50, 5F
文章代碼(AID): #1B_-Z7PC (C_and_CPP)
文章代碼(AID): #1B_-Z7PC (C_and_CPP)