Il semble que j'ai trouvé la plupart de mes problèmes simplement en multi-thread mon application! Cependant, je suis confronté à une petite erreur: "Stack around variable 'x' était corrompu." Cela fonctionne correctement (après avoir quitté abort sur l'erreur de débogage), mais évidemment je ne peux pas avoir une erreur chaque fois que quelqu'un exécute l'application. Donc, voici le code pertinent. C'est le rappel d'un de mes threads de travail.WinAPI Ecrire "Edit" Dialog to Pipe (Erreur: empiler autour de la variable 'x' a été corrompu)
DWORD WINAPI Arc_writePipe(LPVOID threadParam)
{
Arc_Redirect ar;
DWORD dwWrote;
CHAR chBuf[BUFSIZE];
HANDLE hPipe = (HANDLE)threadParam;
HWND g1 = FindWindow("GUI",NULL);
HWND dlg = GetDlgItem(g1,IDO_WORLDOUT);
//int nLength = GetWindowTextLength(GetDlgItem(g1,IDO_WORLDINPUT));
while(bRunThread)
{
if(GetDlgItemText(g1,IDO_WORLDINPUT,chBuf,BUFSIZE))
{
chBuf[BUFSIZE] = '\0';
if(!WriteFile(hPipe,chBuf,BUFSIZE,&dwWrote,NULL))
{
//SetDlgItemText(g1,IDO_WORLDINPUT,NULL); // This is to reset text when done sending to input
if(GetLastError() == ERROR_NO_DATA)
break; // Normal :)
else
MessageBox(g1,"Error: Could not WriteFile();","Error",MB_ICONERROR);
}
}
}
return 1;
}
Quelqu'un a-t-il une idée de la raison pour laquelle cette erreur persiste? Je ne reçois aucune sortie GetLastError() autre que "ERROR_NO_DATA" après l'écriture des données, donc je suppose que cela a quelque chose à voir avec mon WriteFile(); fonctionne en conjonction avec le BUFSIZE (défini à 0x1000). Donc, fondamentalement, je fais quelque chose de mal. Est-ce que quelqu'un sait peut-être un meilleur moyen d'obtenir des informations à partir d'une boîte de dialogue d'édition et de l'écrire sur un tuyau?
Merci beaucoup pour votre aide!
Cordialement,
Dennis M.
Je ne vois aucune variable 'x' dans votre code. Quelle est la variable réelle qui est corrompue? –