是否可以将 Byte[] 从 C# 传递给非托管 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 ,但我想知道是否有可能接近我在上面想要实现的目标
提前致谢!