回 帖 发 新 帖 刷新版面

主题:VC2008中遇到的问题

在用2008建立一MFC(exe),SDI,添加了线程菜单,在下面添加了工作者线程,ID_WORKTHREAD,添加了ONWORKTHREAD()函数到Cview中,在Cview.cpp中填入如下代码:
# include "afxmt.h"
CString MyString="I am using my frist thread";
编写Cview::OnWORKTHREAD()
{
// TODO: 在此添加命令处理程序代码
CDC *pDC=GetDC();
pDC->TextOutW(30,40,(const CString &)"String before change:");
//编译错误,我强制将“ ”转换成const CString &)",
pDC->TextOutW(50,80,MyString);
//CString pString=(const CString &)"I am using my first workthread now";
// pString=&MyString;
AfxBeginThread(MyWorkThreadFunction,(LPVOID)&MyString);//(LPVOID)pString
pDC->TextOutW(30,120, (const CString &)"String after change:");
pDC->TextOutW(50,160,MyString);

ReleaseDC(pDC);
}
继续添加函数
UINT MyWorkThreadFunction(LPVOID pParam)//LPVOID pParam
{
CWnd *pMainWnd=AfxGetMainWnd();
if(pParam==NULL)
{
LPCWSTR p=(LPCWSTR)"Param error";
::MessageBox(pMainWnd->m_hWnd,p,p,MB_OK);
AfxEndThread(2);
}
CString *pStr=(CString *)pParam;
pStr->MakeReverse();
LPCWSTR p2=(LPCWSTR)"Thread run";
::MessageBox(pMainWnd->m_hWnd,p2,p2,MB_OK);
return 0;
}
运行程序,编译通过,运行时出现错误;如图 
谁能帮我改改

回复列表 (共1个回复)

沙发

pDC->TextOutW(30,40,(const CString &)"String before change:");
只要
pDC->TextOutW(30,40,L"String before change:");
就可以了.不用强转为(const CString &)
LPCWSTR p2=(LPCWSTR)"Thread run";这个也是.都改过来吧,这种强转并不能达到目的.
""定义的是单字节字符串,它的最小单位是一个字节,而宽字节最小单位是两个字节,编码也不同,简单地使用
(const CString &)来强转,是不能将单字节字符串转换成宽字节字符串的.

感觉你的工程设置有问题,方便发工程的话可以帮你看看问题在什么地方.

我来回复

您尚未登录,请登录后再回复。点此登录或注册