如何将void *值正确转换为CString

时间:2019-03-21 11:11:29

标签: c++ mfc

我试图弄清楚如何使用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
       }
}

这是我到目前为止尝试过的:

  1. 我试图像这样将其投射到Cstring:

    CString * pMyNum = static_cast(pBlueRd);

但是我认为这是不对的,我做错了什么,因为当我尝试打印 pMyNum 值时,它将显示其他内容,而不是所需的值。

  1. 我试图复制CColorRead类,并为其提供了set和get函数。在调用CDat_color :: OnBlueRd之前,我使用了set函数来设置sNumBlue值。并尝试在函数OnBlueRd中获取值,但此时该值为NuLL,否则在尝试获取它时会引发异常。

我该怎么做才能安全地获得价值? 谢谢大家,如果问题没有得到很好的编辑,我感到抱歉,我在用手机问,我会尝试从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()

1 个答案:

答案 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;
}