我已经将字符串移到资源中,幸运的是,我有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/

10-11 18:45