簡體   English   中英

使用VC ++中的MemoryMappedFiles或命名管道以及Windows 7中的C#進行進程間通信

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM