将多维数组从托管代码传递到非托管代码
我想执行以下操作:
在 C# 代码中创建三个维度数组,如下所示:
var myArray = new Short[x,y,z]; UnangedFunction(myArray);
将其传递给非托管代码 (C++),如下所示:
void UnmanagedFunction(short*** myArray) { 首先短= myArray[0][0][0]; }
更新 当我尝试以下代码时,出现运行时错误:
尝试读取或写入受保护的内存。
谢谢你!!!
I would like to do the following:
Create three dimesinal array in c# code like this:
var myArray = new short[x,y,z]; UnanagedFunction(myArray);
Pass it to unmanaged code (c++) like this:
void UnmanagedFunction(short*** myArray) { short first = myArray[0][0][0]; }
UPDATED
When I try the following code I have runtime error:
Attempted to read or write to protected memory.
Thank you!!!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
这已经过测试并且有效,唯一的限制是当你完成它时,你必须在数组指针上调用
Marshal.FreeHGlobal
,否则你会遇到内存泄漏,我还建议您更改您的 C++ 函数,以便它接受数组维度,否则您将只能使用特定大小的 3d 数组This has been tested and it works, the only limitation is that you have to call
Marshal.FreeHGlobal
on the array pointer when you are done with it or you will get a memory leak, I would also suggest that you change your c++ function so that it accepts the array dimensions or you will only be able to use 3d arrays of specific size我用纯 C# 编写它,但如果您从
Func
中删除unsafe static
,则Func
应该可以在 C/C++ 中工作。请注意,我确信写这个是可以的:-)我正在使用这个 索引到任意等级的数组C#
I'm writing it in pure C#, but if you take away the
unsafe static
fromFunc
, theFunc
should work in C/C++. Be aware that I'm note sure sure it's ok ok to write this :-)I'm using this Indexing into arrays of arbitrary rank in C#