Опитвам се да комуникирам между 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();
Проблемът ми е, че независимо кой подход използвам, отворените извиквания винаги връщат грешка „файлът не е намерен“. И двете приложения работят под един и същ потребителски акаунт на моя 64-битов Windows 7. Какво пропускам тук?