내 C# 응용 프로그램 & C++ 응용 프로그램 사이에 파이프를 만드는 데 문제가있는 것 같습니다. 내 C++ 응용 프로그램은 특정 프로그램에 주입되는 dll이며, 내 C# 응용 프로그램의 파이프를 엽니 다.C++ 파이프/ReadFile lpNumberOfBytesRead/DLL
내 문제는 무엇입니까? ReadFile을 lpNumberOfBytesRead (cbRead) 항상 0
코드 반환이 0 인 바이트를 찾을 때까지
hPipe1=CreateFile(lpszPipename1, GENERIC_WRITE ,0,NULL,OPEN_EXISTING,FILE_FLAG_OVERLAPPED,NULL);
hPipe2=CreateFile(lpszPipename2, GENERIC_READ ,0,NULL,OPEN_EXISTING,FILE_FLAG_OVERLAPPED,NULL);
BOOL fSuccess;
char chBuf[100];
DWORD dwBytesToWrite = (DWORD)strlen(chBuf);
DWORD cbRead;
int i;
while(1){
fSuccess = ReadFile(hPipe2,chBuf,dwBytesToWrite,&cbRead, NULL);
if(fSuccess)
{
//4Stackoverflow: This works
msg = "";
for(i=0;i<cbRead;i++){
//4Stackoverflow: This never gets called, because cbRead is always 0
MessageBoxW(NULL, L"Sent", L"Hooked MBW", MB_ICONEXCLAMATION);
msg += chBuf[i];
}
그리고'dwBytesToWrite'가 0이 아닌가요? –
흠, 나는 C++을 사용하지 않지만이 경우에는 사용해야합니다. strlen 때문에 dwBytesToWrite가 항상 100이 아닙니다 (...? 아니면 ReadFile을 호출 할 때 chBuf의 길이로 변경됩니까? hmm이 확인하지 않았습니다.) 문제가 될 수 있으며, 단지 chBuf가 비어있을 것입니다. C#을 게시 할 것입니다. 코드 –
에 msdn dwBytesToWrite : _In_ DWORD nNumberOfBytesToRead, 그래서 항상 100이어야합니다? 어쩌면 나는 strlen을 사용하는 대신에 하드 코딩해야합니다. –