我已经阅读了我能找到的关于邮槽的所有内容,但仍然存在写入已由另一台计算机上的邮槽服务器打开以供读取的邮槽的问题。
我对同一台计算机上的邮槽没有问题。例如,如果我尝试像这样写入本地计算机上的邮槽:
var
sMsg: string;
iBytes: DWORD;
begin
SlotName := '\\.\mailslot\testslot';
Handle := CreateFile(PChar(SlotName), GENERIC_WRITE, FILE_SHARE_READ, nil,
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
Result := WriteFile(Handle, sMsg[1], Length(sMsg), iBytes, nil);
end;
CreateFile
如果邮槽服务器程序没有创建邮槽,将失败并显示文件不存在错误代码。
但是,如果我将这样\\MYSERVER\mailslot\testslot
的内容作为邮槽名称传递,它总是返回一个有效的文件句柄。即使计算机名无效,它仍然返回一个文件句柄,然后WriteFile
也成功。
如果计算机名称不正确或该计算机上的邮槽服务器没有创建邮槽,我希望CreateFile
失败,但这似乎不是这种情况,只有在写入本地计算机上的邮槽时才会出现这种情况.
有人可以启发我吗?