// CCEXPipe.cpp : 定义 DLL 应用程序的入口点。 // #include "stdafx.h" #include "CCEXPipe.h" #ifdef _MANAGED #pragma managed(push, off) #endif BOOL APIENTRY DllMain( HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) { WSADATA wsaData; WORD wVersionRequested=MAKEWORD(2, 2); if( 0 == WSAStartup (wVersionRequested, &wsaData)) { ; } LogOutToFile("Pipe Load succ"); return TRUE; } #ifdef _MANAGED #pragma managed(pop) #endif BOOL ReadPipePacket(SOCKET rsocket, char* pcReadBuf, int lMaxSize, int& lRead) { lRead = 0; int lLen = 0; //读取长度 int lNeedRead = sizeof(lLen); int lReadPos = 0; while (lNeedRead > 0) { int lReadTemp = recv(rsocket, ((char*)&lLen)+lReadPos, lNeedRead, 0); if(lReadTemp <= 0) { LogOutToFile("ReadPipePacket recv len error.[%d] [%d]", GetLastError(), lReadTemp); return FALSE; } lNeedRead -= lReadTemp; lReadPos += lReadTemp; } lRead = lLen; if (lLen >= lMaxSize) { LogOutToFile("ReadPipePacket limit max.[%d] recv[%d]", GetLastError(), lMaxSize, lLen); return FALSE; } //读取数据包 lNeedRead = lLen; lReadPos = 0; while (lNeedRead > 0) { int lReadTemp = recv(rsocket, pcReadBuf+lReadPos, lNeedRead, 0); if(lReadTemp <= 0) { LogOutToFile("ReadPipePacket recv body error.[%d] [%d]", GetLastError(), lReadTemp); return FALSE; } lNeedRead -= lReadTemp; lReadPos += lReadTemp; } return TRUE; } BOOL SendeData(SOCKET wsocket, const char* pData, int lLen) { if (-1 == wsocket) { return FALSE; } int lSend = -1; //向命名管道中写入数据 lSend = send(wsocket, (const char*)&lLen, sizeof(lLen), 0); if(sizeof(lLen) != lSend) { LogOutToFile("写入数据长度失败,预期写入[%d],实际写入[%d]\r\n", (int)sizeof(lLen), lSend); return FALSE; } lSend = send(wsocket, pData, lLen, 0); if(lLen != lSend) { LogOutToFile("写入数据失败,预期写入[%d],实际写入[%d]\r\n", lLen, lSend); return FALSE; } return TRUE; }