我试图弄清楚如何使用void *值,我知道它的先前值(调用函数时)是CString。这是一个示例:
在某个时刻,此var中有一个CString值: sNumBlue 值可以类似于:“ 000000000000000059841145”
pNumBlue = new CString(sNumBlue);
PostMessage (WM_BLUERD,DEF_BLUE_ADD_BLUE,(long)pNumBlue);
在最后一行代码中,它将CString值发送到另一个将其作为void *接收的函数,该函数已经具有使用Class处理void *的方法,但是我不能使用类,因为它旨在接收另一个我似乎不理解的其他值或其他值,并且当我尝试使用它时,会出现异常。这是该功能:
LRESULT CDat_color::OnBlueRd(short ColorType, void *pBlueRd )
{
CString sNumColor;
CColorRead* pColorRead;
try{
pColorRead = (CColorRead*) pBlueRd;
sNumColor = pColorRead->GetNumColor();
{Catch(catch stuff...)
//here it handles the exception
}
}
这是我到目前为止尝试过的:
我试图像这样将其投射到Cstring:
CString * pMyNum = static_cast(pBlueRd);
但是我认为这是不对的,我做错了什么,因为当我尝试打印 pMyNum 值时,它将显示其他内容,而不是所需的值。
我该怎么做才能安全地获得价值? 谢谢大家,如果问题没有得到很好的编辑,我感到抱歉,我在用手机问,我会尝试从PC上修复它。随时问我任何相关的问题,老实说我不是一个出色的C ++程序员,我每天都在学习新事物。 顺便说一句,我正在使用Visual C ++ 2006和MFC框架。 再次感谢
编辑:
这是消息处理程序:
afx_msg LRESULT OnBlueRd(short shErr=0,void *pNum=NULL);
添加了MESSAGE_MAP:
BEGIN_MESSAGE_MAP(CDat_color, CDialog)
ON_MESSAGE(WM_BLUERD,OnBlueRd)
END_MESSAGE_MAP()
答案 0 :(得分:1)
对于ON_MESSAGE
项,函数的签名必须为:
afx_msg LRESULT OnBlueRd(WPARAM wParam, LPARAM lParam);
您可能想要这样:
pNumBlue = new CString(sNumBlue);
PostMessage (WM_BLUERD, DEF_BLUE_ADD_BLUE, (LPARAM)pNumBlue); // LPARAM instead of LONG
LRESULT CDat_color::OnBlueRd(WPARAM wpColorType, LPARAM lpBlueRd)
{
// wpColorType will contain DEF_BLUE_ADD_BLUE, but it's not used in your code
CString *pNumBlue = (CString*)lpBlueRd;
// do whatever needs to be done with the string *pNumBlue
delete pNumBlue; // delete it
return 0;
}