Exception 使用messagebox时的第一次机会异常
每当我使用MessageBox函数时,我都会遇到第一次异常。我的信箱是这样的Exception 使用messagebox时的第一次机会异常,exception,visual-c++,messagebox,Exception,Visual C++,Messagebox,每当我使用MessageBox函数时,我都会遇到第一次异常。我的信箱是这样的 MessageBox(NULL, (LPCWSTR)L"testing", (LPCWSTR)L"SOFTSAFETY", MB_OKCANCEL | MB_ICONWARNING); 如果我调试,我会得到这个 First-chance exception at 0x76267A24 (user32.dll) in Thread Message BOX.exe: 0xC0000005: Access violatio
MessageBox(NULL, (LPCWSTR)L"testing", (LPCWSTR)L"SOFTSAFETY", MB_OKCANCEL | MB_ICONWARNING);
如果我调试,我会得到这个
First-chance exception at 0x76267A24 (user32.dll) in Thread Message BOX.exe: 0xC0000005: Access violation reading location 0x001629D0.
First-chance exception at 0x76267A24 (user32.dll) in Thread Message BOX.exe: 0xC0000005: Access violation reading location 0x001629D0.
First-chance exception at 0x76267A24 (user32.dll) in Thread Message BOX.exe: 0xC0000005: Access violation reading location 0x001629D0.
First-chance exception at 0x76267A24 (user32.dll) in Thread Message BOX.exe: 0xC0000005: Access violation reading location 0x001629D0.
如何删除这些异常?我的程序没有因为这个异常而挂起,它只是显示在输出窗口中。所以我可以忽略这些。请指导我。也许看看MSDN会对你有所帮助?MessageBox函数具有以下原型:
int WINAPI MessageBox(
_In_opt_ HWND hWnd,
_In_opt_ LPCTSTR lpText,
_In_opt_ LPCTSTR lpCaption,
_In_ UINT uType
);
LPCTSTR
是指向TCHAR
的指针,不一定是宽字符。在wtypes.h
中,您会发现:
const TCHAR *LPCTSTR
和TCHAR
可以是wchar\u t
或char
,具体取决于项目的设置。你的问题几乎可以肯定是你强迫(通过一个演员)宽字符在正常的预期
您可以尝试使用
\u T()
宏,根据项目的配置生成常规或宽字符串文字。对LPCWSTR的强制转换是为了什么?如果你需要这些类型转换来编译代码,那就大错特错了…@CodyGray如果我需要显示字符串变量,我需要这些类型转换。不,你不需要。如果你必须在这里施展,那你就做错了。编译器试图告诉您这一点,但您告诉它通过添加强制转换来关闭。如果您想了解发生异常的原因,请将调试器设置为在第一次出现异常时中断。所有这些都是很好的建议,但不要忘了指出,窄(‘常规’)字符在十多年前就已在Windows编程中过时。此外,所有项目都应该定义UNICODE
和\u UNICODE
符号,以强制所有项目都是宽字符。许多人更进一步,用显式的宽字符替换所有宏类型:wchar\u t
,wchar\u t*
,L“…
等等。