C_and_CPP 板


LINE

開發平台(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://webptt.com/m.aspx?n=bbs/C_and_CPP/M.1556686840.A.05B.html
1F:→ sarafciel: 指正(O) 指證(X) 05/01 13:44
2F:→ sarafciel: 我沒理解錯的話 你那個MyCPPFun的函式好像是吃C#的 05/01 13:46
3F:→ sarafciel: string當字串 但C++的指標根資料結構其實是unmanged的 05/01 13:47
4F:→ sarafciel: 所以兩邊不互通 應該是要訂成int MyCPPFun(IntPtr)這種 05/01 13:48
5F:→ sarafciel: 更正 int MyCPPFun(ref IntPtr)這種 然後++那邊的函式 05/01 13:51
6F:→ sarafciel: 介面也多補一個&給他弄成指標的參考 你在C#那邊再把挖 05/01 13:52
7F:→ sarafciel: 出來的IntPtr用Marshal的函式轉成C#的string才會對 05/01 13:53
8F:→ feeya: Google關鍵字 c# call c++ dll string 05/01 15:27
9F:推 firejox: 你的問題 跟 這篇#1SimaasT 是一樣的 05/01 16:09
10F:→ firejox: 你需要reference 05/01 16:10
11F:→ firose: 跟編碼無關,你只是在C++裡面把紙標指向別處,外面當然沒 05/02 09:58
12F:→ firose: 影響。同樣的事情你在C#作也是一樣,所以跟語言也無關。 05/02 09:59
13F:→ RishYang: Windows XP!!!! 05/06 06:06
感謝sara大大,有成功了! 我目前是c#端宣告一個ref string 把這個string的地址傳到c++ 然後把字串丟進這個地址裡 是可以work的 理論上應該不會有沒有忘記釋放memory的問題吧 因為是C#宣告的 會自動回收...吧XD ※ 編輯: Stevenashh (42.73.203.89), 05/09/2019 22:14:14
14F:→ sarafciel: 會自動回收 所以你要注意的是另一種情況 05/10 12:26
15F:→ sarafciel: 就是++那邊有把C#丟給他的address存下來 然後C#做了回 05/10 12:27
16F:→ sarafciel: 收 導致後面再去call c++時這個address的東西已經被釋 05/10 12:28
17F:→ sarafciel: 放最後++那邊炸掉這種case 05/10 12:28







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:e-shopping站內搜尋

TOP