我希望与integer array
Windows Service
中的C#
之间的unmanaged C++
共享一个固定大小的Windows Service
。这将跨越两个流程,C#
中的C++
,memory mapped files
中的另一个流程。
这个事务需要完成一次,并且它不是一个大数组,只需要通过两者之间的共享内存传递它。
实现这一目标的最有效方法是什么?也许使用CLI
,但我不确定数据将如何传递。
编辑 -
我不想使用P/INVOKE
包装,或marshalled
(因为我知道它的时间很贵)。
我会继续进行内存映射,但我不确定两者之间的数据是unmarshalled
和CGRect textViewFrame;
if(IS_IPHONE_5)
textViewFrame = CGRectMake(0.0f, 64.0f, 320.0f, 390.0f);
else
textViewFrame = CGRectMake(0.0f, 64.0f, 320.0f, 320.0f);
textViewText = [[UITextView alloc] initWithFrame:textViewFrame];
textViewText.returnKeyType = UIReturnKeyDone;
textViewText.delegate = self;
textViewText.backgroundColor = [UIColor clearColor];
[self.view addSubview:textViewText];
[self.textViewText setFont:[UIFont fontWithName:@"PT Mono" size:16]];
[self.textViewText setTextColor:[UIColor colorWithRed:32.0f/255.0f green:32.0f/255.0f blue:32.0f/255.0f alpha:1]];
。
答案 0 :(得分:1)
有不同的方法来实现这一目标 -
答案 1 :(得分:1)
在C#端,您可以使用MemoryMappedFile
类来访问内存映射文件。
在非托管端,您可以使用Windows API函数CreateFileMapping()
打开映射文件,然后使用MapViewOfFile
获取文件中数据的void*
。然后,您可以将void*
强制转换为int*
,以便以整数数组的形式访问数据。
您可能还希望使用命名同步事件(使用C#中的EventWaitHandle
和Windows API中的CreateEvent()
)来指示MMF何时被填充。