Exception 使用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函数时,我都会遇到第一次异常。我的信箱是这样的

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“…
等等。