アプリケーションをマルチスレッド化するだけで、ほとんどの問題を解決できたようです。ただし、「変数 'x' の周りのスタックが壊れています」というエラーが少し発生しています。(デバッグエラーで中止を押した後)正常に動作しますが、誰かがアプリケーションを実行するたびにエラーが発生することはありません。したがって、ここに関連するコードがあります。これは、ワーカー スレッドの 1 つへのコールバックです。
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;
}
このエラーが発生し続ける理由について誰か考えがありますか? データが書き込まれた後、「ERROR_NO_DATA」以外の GetLastError() 出力が得られないため、WriteFile(); と関係があると想定しています。BUFSIZE (0x1000 で定義) と組み合わせて機能します。基本的に、私は何か間違ったことをしています。編集ダイアログから情報を取得してパイプに書き込むためのより良い方法を知っている人はいますか?
助けてくれてどうもありがとう!
よろしく、
デニス M.