#include #include static CSIPCClient sipc; BOOL APIENTRY DllMain(HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) { return TRUE; } int WINAPI Connect(const char* name) { return sipc.Connect(name); } int WINAPI Disconnect() { return sipc.Disconnect(); } int WINAPI Send(const char* command, char* result, const int len) { return sipc.Send(command,result,len); } int CSIPCClient::Send(const char* command, char* result, const int len) { if (hSend==INVALID_HANDLE_VALUE || hReceive==INVALID_HANDLE_VALUE) return -1; memset(result,0,len); string s=command; s=selfname+"\t"+s; DWORD numwrite,numread; if (!WriteFile(hSend,s.c_str(),s.size(),&numwrite,NULL)) return -1; if (result!=NULL) { if (!ReadFile(hReceive,result,len,&numread,NULL)) return -1; } return 0; } int CSIPCClient::Disconnect() { if (hReceive!=INVALID_HANDLE_VALUE) { CloseHandle(hReceive); hReceive=INVALID_HANDLE_VALUE; } if (hSend!=INVALID_HANDLE_VALUE) { CloseHandle(hSend); hSend=INVALID_HANDLE_VALUE; } return 0; } int CSIPCClient::Connect(const char* name) { selfname=name; string slotname="\\\\.\\mailslot\\"+selfname; hReceive=CreateMailslot(slotname.c_str(),MESSAGESIZEMAX,MAILSLOT_WAIT_FOREVER,NULL); if (hReceive==INVALID_HANDLE_VALUE) return -1; hSend=CreateFile("\\\\.\\mailslot\\Stand",GENERIC_WRITE,FILE_SHARE_READ | FILE_SHARE_WRITE,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL); if (hSend==INVALID_HANDLE_VALUE) return -1; return 0; } CSIPCClient::CSIPCClient() { selfname = ""; hSend = INVALID_HANDLE_VALUE; hReceive = INVALID_HANDLE_VALUE; } CSIPCClient::~CSIPCClient() { Disconnect(); }