[問題] DLL for C# Error:嘗試讀取或寫入受保씠…

看板C_and_CPP (C/C++)作者 (RICO)時間15年前 (2011/05/18 19:48), 編輯推噓1(1011)
留言12則, 5人參與, 最新討論串1/2 (看更多)
開發平台(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

05/18 20:06, , 1F
雖然不是很懂…不過C#的array本身就是class
05/18 20:06, 1F

05/18 20:06, , 2F
跟C / C++裡的array完全是不一樣的東西啊…
05/18 20:06, 2F

05/18 20:07, , 3F
int[,] x和 int** a,完全是不一樣的存在。
05/18 20:07, 3F

05/18 20:15, , 4F
樓上這個例子很怪 XD
05/18 20:15, 4F

05/18 20:19, , 5F
C++ 的二維陣列不是可以表示成int** ??
05/18 20:19, 5F

05/18 20:20, , 6F
置底文第十二戒
05/18 20:20, 6F

05/18 20:20, , 7F
也可以呼叫到,但是在寫入發生錯誤 ex:c[][]=any
05/18 20:20, 7F

05/18 20:21, , 8F
而且C#的二維陣列跟C++的二維陣列應該不能相提並論
05/18 20:21, 8F

05/18 20:24, , 9F
那一定要打成一維陣列 來傳嗎= =
05/18 20:24, 9F

05/18 21:31, , 10F
C#裡面的物件基本上都是COM元件!!google AllocCoTaskMem
05/18 21:31, 10F

05/18 21:35, , 11F
或者用CLR/CLI去寫c++
05/18 21:35, 11F
我的主要目的是想把CUDA打包成DLL給C#使用 因為我看網路上的教學都是以WIN32進行打包,不知道CLR/CLI可不可以打包CUDA。 ※ 編輯: laevatain103 來自: 114.33.51.23 (05/18 22:25)

05/18 22:47, , 12F
WIN32可以打包cuda,CLR應該也可以。比較重要的是interfac
05/18 22:47, 12F
文章代碼(AID): #1Dqx8bvv (C_and_CPP)
文章代碼(AID): #1Dqx8bvv (C_and_CPP)