Witam! Poproszę o poradę jak poprawić błąd określony w temacie postu. Przekazuję uchwyty do potoków anonimowych pomiędzy aplikacją rodzicem a potomkiem. Zastosowałem rozwiązanie ze strony: http://www.chelpdesk.pun.pl/viewtopic.php?id=12
Przystosowałem do swoich potrzeb i w próbnych, napisanych tylko dla sprawdzenia komunikacji aplikacjach działa. Po wkomponowaniu w docelową aplikację pojawił się kłopot z "niepełnymi" uchwytami. Otóż dla przykładu, jeśli uchwyt w "rodzicu" ma wartość 0x4a4 to przekazany przez zmienne środowiskowe jest tylko 0xa4. Domyślam się, że błąd jest w sposobie rzutowania/przekształcania ale brakuje mi koncepcji gdzie i jaki. Aplikacje próbne były małe i uchwyty w nich mieściły się w jednym bajcie, aplikacja docelowa jest zdecydowanie większa więc i ilość uchwytów do obiektów większa i interesujące mnie uchwyty zajmują dwa bajty.
Poniżej kod zapisujący zmienne :
CreatePipe(&hReadPipeDwn, &hWritePipeDwn, &pipeSA, NULL);
CreatePipe(&hReadPipeUp, &hWritePipeUp, &pipeSA, NULL);
SetEnvironmentVariable(TEXT("uchwytUp"), (LPCTSTR)&hWritePipeUp);
SetEnvironmentVariable(TEXT("uchwytDwn"), (LPCTSTR)&hReadPipeDwn);
CreateProcess(NULL,command1,NULL,NULL,TRUE,HIGH_PRIORITY_CLASS,NULL,NULL,&si,&pi)
A tu odczytujący w potomku:
uchU = (LPTSTR)malloc(BUFSIZE*sizeof(TCHAR));
uchD = (LPTSTR)malloc(BUFSIZE*sizeof(TCHAR));
GetEnvironmentVariable(TEXT("uchwytUp"), uchU, BUFSIZE);
GetEnvironmentVariable(TEXT("uchwytDwn"), uchD, BUFSIZE);
uchwytUp = reinterpret_cast<HANDLE>(*uchU);
uchwytDwn = reinterpret_cast<HANDLE>(*uchD);
printf("%x %x %d %d\n",uchwytDwn,uchwytUp,numBreaded,numbwritten);
Eksperymentowałem z różnymi BUFSIZE ale nie pomogło.