非托管函数有一个double**类型指针参数用以指向二维数组(3*8),在托管代码中我把它封送为IntPtr[]类型
IntPtr ptr = new IntPtr[3];
for (int i = 0; i < 3; i++)
ptr = Marshal.AllocHGlobal(8 * sizeof(double));
传进去的缓冲区内容会被非托管函数修改。
测试调用成功。
但在线多线程连续调用的时候,会发生内存访问违例。
对ptr 是否要手动pin?
------解决方案--------------------------------------------------------
申请内存是非托管的,应该不需要Pin.问题可能是你的非托管代码有线程冲突问题。