[問題] C# 使用 C++ DLL 的問題

看板C_Sharp作者 (婆挪掛夫)時間16年前 (2009/12/18 01:14), 編輯推噓1(101)
留言2則, 2人參與, 最新討論串1/1
大家好 在下這幾天有爬文,弄出一個執行到一半但會當掉的樣本出來 麻煩大家鑑定一下是哪邊出了錯,謝謝。 ※C++端的DLL函式是: #define DLL_DEC_1_API __declspec(dllexport) extern "C" DLL_DEC_1_API int __cdecl fnDLL_Dec_1 (int a, int b, int *&c); 主要的功能就是將c這個call by reference 的 sizeof(int)*3 的指標空間 依序存入{a, b, a+b} 有另外寫一個C來測試是ok的。 ※ C#端就頭痛了: 我把程式PO上來請大家看看 namespace CS_Dec_1 { public partial class Form1 : Form { public int[] c = new int[3] {0, 0, 0}; public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { CDllcaller.Program.fnDLL_Dec_1(1, 2, c); } } } namespace CDllcaller { class Program { [DllImport("DLL_Dec_1.dll")] public static extern int fnDLL_Dec_1(int a, int b, int[] c); } } 嗯,就是跑到這邊往上數12行的:CDllcaller.Program.fnDLL_Dec_1(1, 2, c); 系統就會跳出以下訊息 T_T 類型 'System.AccessViolationException' 的未處理例外狀況發生於 CS_Dec_1.exe 其他資訊: 嘗試讀取或寫入受保護的記憶體。這通常表示其他記憶體已損毀。 DLL用C++ call是完全沒問題的,但究竟C#這邊是哪裡寫錯呢? 拜託了大家,希望看看笑笑後可以提點一下,謝謝。 ( ̄▽ ̄#)﹏﹏ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 218.168.155.141

12/18 07:07, , 1F
(int a, int b, ref int[] c) C#參數的部分改成這樣試試
12/18 07:07, 1F

12/19 03:19, , 2F
傳int 小心在x64爆掉.....XD
12/19 03:19, 2F
文章代碼(AID): #1BAcS0tw (C_Sharp)