[英]C# UWP Windows 10 Inter Process Communication with MemoryMappedFiles missing
[英]Inter-process communication using MemoryMappedFiles or Named Pipes in VC++ and C# in Windows 7
我正在嘗試在VC ++ DLL和C#應用程序之間進行通信。 我已經閱讀了大量的資源和材料,我試着用MemoryMapped文件和Pipes來做,但不幸的是我無法開始工作。
這是我如何創建用C#編寫的“接收器”/服務器部分:
// MemoryMappedFile approach
mmf = MemoryMappedFile.CreateNew(
@"myMMF",
1024*1024,
MemoryMappedFileAccess.ReadWriteExecute);
// Named Pipe approach
NamedPipeServerStream pipe = new NamedPipeServerStream("myPipe", PipeDirection.InOut);
這是VC ++的對應物:
// MMF approach
HANDLE fmap = ::OpenFileMapping(FILE_MAP_READ | FILE_MAP_WRITE, false, (LPCWSTR)"myMMF");
if(fmap == NULL)
return errorMsg();
// Named pipe
HANDLE pipe = ::CreateFile((LPCWSTR)"\\\\.\\pipe\\myPipe", GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL);
if(pipe == INVALID_HANDLE_VALUE)
return errorMsg();
我的問題是,無論我使用哪種方法,open調用總是返回“找不到文件”錯誤。 這些應用程序都在我的64位Windows 7上的相同用戶帳戶下運行。我在這里缺少什么?
::CreateFile((LPCWSTR)"\\\\.\\pipe\\myPipe", ...)
這不起作用,你不能將char *強制轉換為寬字符串,需要進行轉換。 但這里沒有必要,因為這是一個字符串文字。 通過為L添加前綴使其成為unicode文字
::CreateFile(L"\\\\.\\pipe\\myPipe", ...)
與MMF相同的問題。 還要考慮使用進程外通信機制與DLL通信沒有多大意義。 只需在進程中加載它。 使用pinvoke或C ++ / CLI包裝器。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.