我正在使用VS2005“使用Unicode字符集”选项
typedef unsigned char BYTE;
typedef unsigned long DWORD;
BYTE m_bGeraet[0xFF];
DWORD m_dwAdresse[0xFF];
如何使代码有效?
MessageBox (m_bGeraet[0], _T("Display Content"));
MessageBox (m_dwAdresse[0], _T("Display Content"));
答案 0 :(得分:2)
看起来您可能需要一些C语言本身的帮助,我建议您在C上找到一本与Windows编程无关的初学者书。
MessageBox()只显示C风格的字符串,这些字符串是char
类型的数组,其中包含一个ASCII值为0的字符。这个零字符是NUL
字符,据说这些字符串是“NUL终止”或“零终止”。打印字符串时仅显示NUL之前的字符,或者在连接字符串时复制。但是,如果数组中没有NUL字符,则字符串未正确终止并且尝试显示它可能导致崩溃,或者显示“垃圾”,如:“我可以喝啤酒吗?# BT&安培; I10)AAX?
MessageBox()的 szTitle 和 szText 参数期望char *
是指向此类字符串的指针。
如果您尝试传递BYTE
而不是char *
,则BYTE的值将被错误地视为地址。 MessageBox()将尝试以BYTE
的“指定”值访问内存,并且将发生访问冲突。
此问题的一个解决方案是分配char
类型的缓冲区并使用snprintf_s
将数据值转录为字符串表示形式。
例如:
char output_buffer [1024];
snprintf_s(output_buffer,dimensionof(output_buffer),“Geraet = 0x%02X”,m_bGeraet [i]);
MessageBox(hwnd_parent,output_buffer,“来自我的消息:”,MB_OK);
会显示一个消息框,其消息读取的内容类似于“Geraet = 0x35”。
答案 1 :(得分:0)
如果BYTE是1字节必不可少,则必须(可选)使用mbstowcs将字节字符串转换为宽字符串。
答案 2 :(得分:0)
//easy way for bytes is to do this
CString sTemp;
sTemp.Format("my byte = %d", bySomeVal);
MessageBox(sTemp);
//for a DWORD try
sTemp.Format("Dword is %lu", dwSomeVal);
MessageBox(sTemp);
如果你使用MessageBox,我会建议像AfxMessageBox一样... ...