[問題] C++的Unicode字串被C#呼叫使用
看板C_and_CPP作者Stevenashh (YO!!!)時間6年前發表 (2019/05/01 05:00), 6年前編輯推噓1(1推 0噓 16→)留言17則, 5人參與, 6年前最新討論串1/1
開發平台(Platform): (Ex: Win10, Linux, ...)
Windows XP
編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出)
VC++ 2008
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
無
問題(Question):
小弟平常只寫C# 但目前有一隻C++的API要使用
這一隻API假設是 HResult void ExampleAPI( *LPCOLESTR Answer);
說明書上是說編碼方式統一是Unicode (對編碼沒有說非常理解 只知道要用wchar_t)
預期是C#端利用P/Invoke呼叫一隻我自行建立的的C++函式,這隻函示會呼叫到所需的API
C++:
這邊是我自己寫的C++函式,做了一些事情後來呼叫那隻範例API
HResult void MyCPlusPlusFun( wchar_t* ReturnAnswer){
//...do Something....
// Start call API
LPCOLESTR temp;
HResult hr = ExampleAPI( &temp );
ReturnAnswer = temp;
return hr;
}
這邊temp成功取得字串L"happy" 也成功轉給ReturnAnswer(Debug mode確認內容)
C#:
string ReturnValue="";
int result = MyCPlusPlusFun( ReturnValue );
但程式跑完了之後,ReturnValue都是空值Orz
試過C#這邊用StringBuilder,也是一樣的問題
感覺問題是在c++端,但亂試過其他種字串儲存char*
也沒有用Orz
應該是對c++編碼這邊太不熟了 但時間上可能沒辦法讓我慢慢學C++
不曉得有沒有大大知道我錯誤的地方在哪
若是關於Unicode的敘述有什麼錯誤也希望不吝指正 感謝
餵入的資料(Input):
C#端:
string ReturnValue="" ;
預期的正確結果(Expected Output):
C#端:
string ReturnValue=L"happy";
錯誤結果(Wrong Output):
string ReturnValue="";
程式碼(Code):(請善用置底文網頁, 記得排版,禁止使用圖檔)
只有一點點,在上述內文中有提及就不重覆貼上影響閱讀
補充說明(Supplement):
希望C++或是有常在C#與C++中做呼叫的大大可以指證一下我的錯誤Orz
感謝!
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.37.162.76
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1556686840.A.05B.html
→
05/01 13:44,
6年前
, 1F
05/01 13:44, 1F
→
05/01 13:46,
6年前
, 2F
05/01 13:46, 2F
→
05/01 13:47,
6年前
, 3F
05/01 13:47, 3F
→
05/01 13:48,
6年前
, 4F
05/01 13:48, 4F
→
05/01 13:51,
6年前
, 5F
05/01 13:51, 5F
→
05/01 13:52,
6年前
, 6F
05/01 13:52, 6F
→
05/01 13:53,
6年前
, 7F
05/01 13:53, 7F
→
05/01 15:27,
6年前
, 8F
05/01 15:27, 8F
推
05/01 16:09,
6年前
, 9F
05/01 16:09, 9F
→
05/01 16:10,
6年前
, 10F
05/01 16:10, 10F
→
05/02 09:58,
6年前
, 11F
05/02 09:58, 11F
→
05/02 09:59,
6年前
, 12F
05/02 09:59, 12F
→
05/06 06:06,
6年前
, 13F
05/06 06:06, 13F
感謝sara大大,有成功了!
我目前是c#端宣告一個ref string
把這個string的地址傳到c++ 然後把字串丟進這個地址裡
是可以work的
理論上應該不會有沒有忘記釋放memory的問題吧
因為是C#宣告的 會自動回收...吧XD
※ 編輯: Stevenashh (42.73.203.89), 05/09/2019 22:14:14
→
05/10 12:26,
6年前
, 14F
05/10 12:26, 14F
→
05/10 12:27,
6年前
, 15F
05/10 12:27, 15F
→
05/10 12:28,
6年前
, 16F
05/10 12:28, 16F
→
05/10 12:28,
6年前
, 17F
05/10 12:28, 17F