如何使用共享内存将int[]从c#传递到c++
本文关键字:c++ 共享 何使用 内存 int | 更新日期: 2023-09-27 18:21:23
我正试图通过托管内存文件将一个整数数组从c#传递到c++。文本很容易处理,但我在c++环境中已经超出了我的深度,不知道如何针对整数数组调整它。
在c端,我通过:
pView = LS.Core.Platforms.Windows.Win32.MapViewOfFile(
hMapFile, // Handle of the map object
LS.Core.Platforms.Windows.Win32.FileMapAccess.FILE_MAP_ALL_ACCESS, // Read and write access
0, // High-order DWORD of file offset
ViewOffset, // Low-order DWORD of file offset
ViewSize // Byte# to map to the view
);
byte[] bMessage2 = Encoding.Unicode.GetBytes(Message2 + ''0');
Marshal.Copy(bMessage2, 0, pView2, bMessage2.Length);
这里pView2是指向内存映射文件的指针。
在c++方面,我调用:
LPCWSTR pBuf;
pBuf = (LPCWSTR) MapViewOfFile(hMapFile, // handle to map object
FILE_MAP_ALL_ACCESS, // read/write permission
0,
0,
BUF_SIZE);
我该如何将其更改为处理整数数组?谢谢
a)您可以将int[]复制到byte[]中。您可以使用BitConverter.GetBytes或位算术(byte0=(字节)(i>>24);byte1=(字节)(i>>16);…)
b) 您可以使用不安全的代码将int[]位复制(blit)到目标字节[]
c) 也许你可以使用Array.Copy。我认为它可以处理任何blitable值类型。
根据评论,我将详细说明b):
int[] src = ...;
IntPtr target = ...;
var bytesToCopy = ...;
fixed(int* intPtr = src) {
var srcPtr = (byte*)intPtr;
var targetPtr = (byte*)target;
for(int i from 0 to bytesToCopy) {
targetPtr[i] = srcPtr[i];
}
}