是否可以将C#中的Byte []传递给非托管C ++并在C ++中修改它,以便在C#中读取它的值? 类似的东西:
C#:
[DllImport("MyDll.dll")]
public static extern bool UnmanagedFunction(ref Byte[] a, short b, ref ulong c);
...
bool success;
Byte[] a = new Byte[65];
ulong c = 0;
success = UnmanagedFunction(ref a, (short)a.Length, ref c);
C++:
extern "C" __declspec(dllexport) BOOL WINAPI UnmanagedFunction(
__inout_ecount(b) PBYTE a,
__in INT16 b,
__out DWORD c
) {
BOOL success = FALSE;
PBYTE uA;
OVERLAPPED d;
...
success = ReadFile(
readHandle,
uA,
b,
&c,
&d);
if ( success ) {
a = uA;
}
free(uA);
return success;
}
当我尝试在调用“UnmanagedFunction”之后读取C#上的变量“a”时,它只显示数组的第一个位置,我很抱歉C代码我对指针和引用很新。 C ++
我试图通过“uA”“c”次迭代设置“a”上的每个位置,每个位置都被定义但是当代码返回到其托管部分时,我得到一个异常告诉我内存已损坏,类似于:
for ( int i = 0; i < c; ++i )
a[i] = uA[i];
我看到函数返回一个IntPtr,然后在托管端调用Marshal.Copy,但是我想知道是否有可能接近我上面想要实现的东西
提前感谢!