在VC+中使用内存附加文件或命名管道进行进程间通信+;和Windows7中的C#

在VC+中使用内存附加文件或命名管道进行进程间通信+;和Windows7中的C#,c#,visual-c++,ipc,named-pipes,memory-mapped-files,C#,Visual C++,Ipc,Named Pipes,Memory Mapped Files,我试图在VC++DLL和C#应用程序之间进行通信。我已经阅读了大量的资源和材料,我尝试使用内存映射文件和管道来完成这项工作,但不幸的是,我无法开始工作 下面是我如何创建用C#编写的“接收器”/“服务器”部分: 这是VC++的对应版本: // MMF approach HANDLE fmap = ::OpenFileMapping(FILE_MAP_READ | FILE_MAP_WRITE, false, (LPCWSTR)"myMMF"); if(fmap == NULL) retur

我试图在VC++DLL和C#应用程序之间进行通信。我已经阅读了大量的资源和材料,我尝试使用内存映射文件和管道来完成这项工作,但不幸的是,我无法开始工作

下面是我如何创建用C#编写的“接收器”/“服务器”部分:

这是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调用总是返回一个“file not found”错误。在我的64位Windows 7上,这两个应用程序都在同一用户帐户下运行。我错过了什么

::CreateFile((LPCWSTR)"\\\\.\\pipe\\myPipe", ...)
这无法工作,无法将char*强制转换为宽字符串,需要进行转换。但这里不需要,因为这是一个字符串文本。通过在L前面加前缀使其成为unicode文本

::CreateFile(L"\\\\.\\pipe\\myPipe", ...)
MMF也有同样的问题。还要考虑使用进程外通信机制来与DLL对话是没有多大意义的。只需在进程中加载它。使用pinvoke或C++/CLI包装器

这无法工作,无法将char*强制转换为宽字符串,需要进行转换。但这里不需要,因为这是一个字符串文本。通过在L前面加前缀使其成为unicode文本

::CreateFile(L"\\\\.\\pipe\\myPipe", ...)

MMF也有同样的问题。还要考虑使用进程外通信机制来与DLL对话是没有多大意义的。只需在进程中加载它。使用pinvoke或C++/CLI包装器。

非常感谢,这解决了问题。dll是由另一个进程加载的,我想我没有任何其他选择。非常感谢,这解决了问题。dll是由另一个进程加载的,我想我没有其他选择。