编辑控制框无法接受错误缓冲区



问题

我正试图在WINAPI GUI上打印出一个错误缓冲区。作为writin,我的代码试图读取或写入未分配的内存,从而引发错误。

必须有某种方法可以优雅地从字符数组转换为LPCTSTR。那是怎么回事?

代码

char        errBuff[2048] = { '' };

以及后来的

Error:
if (DAQmxFailed(error))
DAQmxGetExtendedErrorInfo(errBuff, 2048);
if (taskHandle1 != 0) {
/*********************************************/
// DAQmx Stop Code
/*********************************************/
DAQmxStopTask(taskHandle1);
DAQmxClearTask(taskHandle1);
}
if (DAQmxFailed(error)) //TODO: Test this
printf("DAQmx Error: %sn", errBuff);
printf("End of program, press Enter key to quitn");
AppendText(hOut, L"NIDAQmx Errorn");
wchar_t myErrBuff = (wchar_t)errBuff;
AppendText(hOut, (LPCTSTR) myErrBuff);
break;

以及AppendText 的内容


void AppendText(HWND hEditWnd, LPCTSTR Text) {
int idx = GetWindowTextLength(hEditWnd);
SendMessageW(hEditWnd, EM_SETSEL, (WPARAM)idx, (LPARAM)idx);
SendMessageW(hEditWnd, EM_REPLACESEL, 0, (LPARAM)Text);
}

由于DAQmxGetExtendedErrorInfo将错误消息写入char[],我将添加一个AppendTextA函数,将这些字符串直接发送到WinAPI,而无需转换。

void AppendTextA(HWND hEditWnd, LPCSTR Text) {
int idx = GetWindowTextLength(hEditWnd);
SendMessageA(hEditWnd, EM_SETSEL, (WPARAM)idx, (LPARAM)idx);
SendMessageA(hEditWnd, EM_REPLACESEL, 0, (LPARAM)Text);
}

当错误应该被发送时:

if (DAQmxFailed(error))
printf("DAQmx Error: %sn", errBuff);
printf("End of program, press Enter key to quitn");
AppendTextA(hOut, "NIDAQmx Errorn");
AppendTextA(hOut, errBuff);

最新更新