Re: [問題] DLL for C# Error:嘗試讀取或寫入受保씠…
※ 引述《laevatain103 (RICO)》之銘言:
: 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];
這邊是
int x = 1;
int y = 1;
int w = 2;
int h = 2;
*(a + w*y + x) = *(c + w*y + x);
或是prototype要改成
two(int a[2][2], int c[2][2])
C/C++ 的 int** 和 int[M][N] 完全不是一樣的東西..
int[M][N] 比較像 int[M*N], 而 int** 比較像 int*[M]
在 C# 中的對照
int[,]是 C/C++的 int[M][N],
而 int[][] 才比較像 int**
因為 int[,] (或說C的int[M][N]) 有連續的性質,
所以在 marshaling (serialization) 是可以直接應對的
(在.NET的術語叫blittable)
可以直接傳不用轉
int[][] 就不行了, 你要自已手動寫 custom marshaling
所以你要嘛維度要固定 (e.g., 2*2), C compiler可以幫你換算
或是要傳M,N, 你裡面再自已換算 w*y + x
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.25.189.174
推
05/18 22:09, , 1F
05/18 22:09, 1F
推
05/19 11:15, , 2F
05/19 11:15, 2F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章