[問題] C++ dll傳遞含有char array的struct

看板C_Sharp (C#)作者 (彼得幣)時間10年前 (2015/06/05 15:47), 10年前編輯推噓2(206)
留言8則, 2人參與, 最新討論串1/2 (看更多)
我手上有一個C++寫的dll 現在在C#寫的程式內使用這個dll 在這個dll內有一個struct typedef struct _A { WCHAR buf[64]; DWORD index; } A; 會被當成function的參數傳遞 int funA(A *a) { a.buf...; index = ...; } 現在我想在C#內叫用funA [DllImport("Mydll.dll", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Unicode)] public static extern int funA(IntPtr a); 有先確認過dll確實有值在buf裡面 但是不管怎樣都沒有辦法得到buf的內容 在猜想會不會是memory沒有正確傳遞? 想請教一下該如何才能正確將dll傳的值抓出來呢? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 220.130.36.2 ※ 文章網址: https://www.ptt.cc/bbs/C_Sharp/M.1433490441.A.6ED.html

06/07 04:49, , 1F
你有在C#裡面定義struct _A並建立unmanaged記憶體再傳嗎?
06/07 04:49, 1F

06/07 20:51, , 2F
C#內我有定義struct A了 但是unmanaged的記憶體要怎麼
06/07 20:51, 2F

06/07 20:51, , 3F
宣告 可否幫忙給個關鍵字?
06/07 20:51, 3F

06/09 16:36, , 4F
Marshal.StructureToPtr
06/09 16:36, 4F

06/09 16:37, , 5F
另外你給的資訊不夠,重要的C#端如何定義struct你都沒給
06/09 16:37, 5F

06/09 16:38, , 6F
依據定義方式不同,欄位可能需要用MarshalAs的屬性去標記
06/09 16:38, 6F

06/09 16:39, , 7F
還有,你的buf究竟是C++去alloc後傳址給C#、還是C#就alloc
06/09 16:39, 7F

06/09 16:39, , 8F
完成,lib端只負責填滿記憶體,都會影響到寫法
06/09 16:39, 8F
Hi Litfal, 不好意思, 因為對C#其實不是很熟悉, 因此沒有給到足夠的資訊。 C#端的struct我找了很多方法去對應WCHAR, 後來是寫成 public struct A { public IntPtr buf; public uint index; } 另外我的buf是在C++端alloc, 然後把取到的資訊填入buf之後回傳給C#, 不知道在這種狀況下該怎麼處理位置的傳遞? 其實目前在這個案例裡, 我是把struct內的資料拆成兩個當作參數傳遞, 但是考量到未來可能需要擴充struct內的資料, 這種方式彈性太小了, 所以還是想要了解如何處理這種問題, 還煩請各位不吝指教, 謝謝各位。 ※ 編輯: petercoin (36.229.39.51), 06/09/2015 23:34:21
文章代碼(AID): #1LSLG9Rj (C_Sharp)
文章代碼(AID): #1LSLG9Rj (C_Sharp)