Я пытаюсь установить связь между DLL VC++ и приложением 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();
Моя проблема в том, что независимо от того, какой подход я использую, открытые вызовы всегда возвращают ошибку «файл не найден». Оба приложения работают под одной и той же учетной записью пользователя в моей 64-битной Windows 7. Что мне здесь не хватает?