1
我似乎有一個在我的c#應用程序& C++應用程序之間創建管道的問題。 我的c + +應用程序是一個DLL注入到某個程序,並打開 管道到我的C#應用程序。C++ Pipes/ReadFile lpNumberOfBytesRead/DLL
我的問題?在ReadFile的lpNumberOfBytesRead(cbRead)總是返回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'是非零? – 2013-05-11 17:14:33
嗯,我從來沒有使用C++,但在這種情況下,我必須使用它。是不是dwBytesToWrite總是100因爲strlen(...?或者當我調用ReadFile時,它是否改變爲chBuf的長度?hmm沒有檢查這個。可能是問題,只有爲什麼chBuf是空的,會發布c#代碼 – 2013-05-11 17:18:23
上msdn dwBytesToWrite:_In_ DWORD nNumberOfBytesToRead, 所以它應該總是100正確?也許我應該硬編碼,以防萬一,而不是使用strlen – 2013-05-11 17:20:38