看板 C_and_CPP 關於我們 聯絡資訊
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) VC++ VC# 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) 問題(Question): 我想用C++包成DLL給C#使用結果發生: 其他資訊: 嘗試讀取或寫入受保護的記憶體。這通常表示其他記憶體已損毀 餵入的資料(Input): 預期的正確結果(Expected Output): 錯誤結果(Wrong Output): 程式碼(Code):(請善用置底文網頁, 記得排版) C++ DLL code(win32) extern "C" __declspec(dllexport) void two2(int**,int**); void __declspec(dllexport) two2(int** a,int** c) { c[1][1]=a[1][1]; } ----------------------------------------------------- C# code [DllImport(@"cppdll.dll")] public static extern void two2(int[,] x, int[,] y); private void button3_Click(object sender, EventArgs e) { unsafe { int[,] a = { { 1, 2 }, { 3, 4 } }; int[,] c = new int[2, 2]; two2(a, c); MessageBox.Show(c[1, 1].ToString()); } } 補充說明(Supplement): 各位大大我主要是想說丟一個2維陣列給C++DLL去進行運算, 然後回傳一個2維陣列結果給C# 我現在卡在不知道會有這樣的問題出來= = 所以來求就各位大大幫忙! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.33.51.23
aecho:雖然不是很懂…不過C#的array本身就是class 05/18 20:06
aecho:跟C / C++裡的array完全是不一樣的東西啊… 05/18 20:06
aecho:int[,] x和 int** a,完全是不一樣的存在。 05/18 20:07
loveme00835:樓上這個例子很怪 XD 05/18 20:15
laevatain103:C++ 的二維陣列不是可以表示成int** ?? 05/18 20:19
james732:置底文第十二戒 05/18 20:20
laevatain103:也可以呼叫到,但是在寫入發生錯誤 ex:c[][]=any 05/18 20:20
james732:而且C#的二維陣列跟C++的二維陣列應該不能相提並論 05/18 20:21
laevatain103:那一定要打成一維陣列 來傳嗎= = 05/18 20:24
karcher:C#裡面的物件基本上都是COM元件!!google AllocCoTaskMem 05/18 21:31
karcher:或者用CLR/CLI去寫c++ 05/18 21:35
我的主要目的是想把CUDA打包成DLL給C#使用 因為我看網路上的教學都是以WIN32進行打包,不知道CLR/CLI可不可以打包CUDA。 ※ 編輯: laevatain103 來自: 114.33.51.23 (05/18 22:25)
karcher:WIN32可以打包cuda,CLR應該也可以。比較重要的是interfac 05/18 22:47