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の同じユーザーアカウントで実行されます。ここで何が欠けていますか?