[英]Sharing array memoryfile C++ to C#
i trying share a array via memoryfile c++ to c# based on this example: stream data from c++ to c# over shared memory . 我尝试根据此示例通过memoryfile c ++将数组共享到c#:通过共享内存将数据从c ++流到c# 。 work fine, but i just can get until position 3 from array, another position come 0.
工作正常,但我只能从数组中获取到位置3,另一个位置为0。
C++ that creat MemoryFile 创建MemoryFile的C ++
#include <windows.h>
#include <stdio.h>
struct Pair {
int length;
int data[10];
};
struct Pair* p;
HANDLE handle;
int dataSend[10]{ 500,33,44,66,2,55,98,7,52,36 };
bool startShare()
{
try
{
handle = CreateFileMappingW(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, sizeof(Pair), L"DataSend");
p = (struct Pair*) MapViewOfFile(handle, FILE_MAP_READ | FILE_MAP_WRITE, 0, 0, sizeof(Pair));
return true;
}
catch (...)
{
return false;
}
}
int main()
{
if (startShare() == true)
{
printf("Memory Create");
while (true)
{
if (p != 0) {
for (int h = 0; h < 10; h++)
{
p->data[h] = dataSend[h];
printf("\n number %d", dataSend[h]);
}
}
else
puts("create shared memory error");
}
}
if (handle != NULL)
CloseHandle(handle);
return 0;
}
my C# Read 我的C#阅读
public static int[] data = new int[10];
public static MemoryMappedFile mmf;
public static MemoryMappedViewStream mmfvs;
static public bool MemOpen()
{
try
{
mmf = MemoryMappedFile.OpenExisting("DataSend");
mmfvs = mmf.CreateViewStream();
return true;
}
catch
{
return false;
}
}
public static void Main(string[] args)
{
while (true)
{
if (MemOpen())
{
byte[] blen = new byte[4];
mmfvs.Read(blen, 0, 4);
byte[] bPosition = new byte[280];
mmfvs.Read(bPosition, 0, 280);
Buffer.BlockCopy(bPosition, 0, data, 0, bPosition.Length);
for (int i = 0; i < data.Length; i++)
{
Console.WriteLine(data[i]);
}
}
}
}
work fine, but i just can get until position 3 from array, another position come 0. 工作正常,但我只能从数组中获取到位置3,另一个位置为0。
Update, code work fine now Just a detail,i return a array hex value example:52A7E600 but in my code c# get bit numbers like: 10300071984, how i cant convert in side c# to get same format? 更新,代码现在可以正常工作只是一个细节,我返回一个数组十六进制值示例:52A7E600,但是在我的代码中,C#获得的位数如:10300071984,我如何无法在C#侧转换以获得相同的格式?
to convert long value to hex in c# you could use: 要将长值转换为c#中的十六进制,可以使用:
long intValue = 10300071984;
// Convert long value 10300071984 -> 265EEA030 as a hex in a string variable
string hexValue = intValue.ToString("X");
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.