我已经将字符串移到资源中,幸运的是,我有LPCTSTR运算符可以方便地实例化字符串,例如:
CString str( (LPCSTR) IDS_MY_STRING);
现在,我想使用MessageBox()进行类似的类型转换,以便它也从资源中加载字符串,因此我可以像这样进行操作:
MessageBox( hWnd, (LPCTSTR) IDS_MY_STRING ,"Error", MB_RETRYCANCEL);
但这是行不通的,它可以编译但在运行时崩溃。现在,以下内容可以工作:
MessageBox( hWnd, (CString) (LPCTSTR) IDS_MY_STRING ,"Error", MB_RETRYCANCEL);
我的问题是,无论如何,MessageBox()都将LPCTSTR作为第二个参数,所以为什么还要从LPCTSTR到CString进行附加类型转换才能使此工作正常进行?
最佳答案
其他人解释了类型强制转换等的详细信息。
此外,为简化代码,您可能需要#define
这样的方便宏:
#define _S(id) (CString(LPCTSTR(id)))
然后将其与
MessageBox
一起使用(或同时用于其他LPCTSTR
参数):MessageBox( hWnd, _S(IDS_MY_STRING), _S(IDS_TITLE), MB_RETRYCANCEL );
关于c++ - 为什么需要此CString类型转换?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10198901/