c++ - 如何正确地将 void * 值转换为 CString
问题描述
我试图弄清楚如何使用 void * 值,我知道它的先前值(调用函数时)是 CString。这是一个例子:
在某些时候,这个 var 中有一个 CString 值:sNumBlue值可能类似于:“000000000000000059841145”
pNumBlue = new CString(sNumBlue);
PostMessage (WM_BLUERD,DEF_BLUE_ADD_BLUE,(long)pNumBlue);
使用最后一行代码,它将 CString 值发送到另一个函数,该函数将其作为 void* 接收,该函数已经有一种使用类处理 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值时,它会显示其他内容而不是所需的值。
- 我试图复制 CColorRead 类并给它一个 set 和 get 函数。在调用 CDat_color::OnBlueRd 之前,我使用 set 函数设置了 sNumBlue 值。当我在函数 OnBlueRd 中时尝试获取该值,但此时该值为 NuLL,或者当我尝试获取它时它会引发异常。
我能做些什么来安全地获得价值?谢谢大家,如果问题没有很好地编辑,我很抱歉,我是用手机问的,我会尝试从电脑上修复它。随意问我任何相关的事情,老实说,我不是一个伟大的 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()
解决方案
对于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;
}
推荐阅读
- python - 如何在不等待其他进程的情况下使用 ProcessPoolExecutor 返回值?
- objective-c - 如何发现是否可以使用给定的编码将 c-string 编码为 NSString
- google-sheets - 如果在工作表 1 中找不到值,如何自动将值添加到工作表 3
- reactjs - 从数据数组渲染 MUI 组件并以不同方式显示第一个组件
- c++ - 是否可以控制用于在 C++ 中执行 openmp 任务的 Openmp 线程?
- sql - 如何解决 SQL 中 FROM 周围的语法错误?
- docker - 在 M1 ARM64 映像上找不到 Linux 映像上使用的库
- spring - 为列表中的每个 bean 调用 PostConstruct
- r - 如何通过R中的特定列将多行合并为单行
- elastic-stack - 在 Elastic 7.15 中上传经度和纬度 (geo_point) 为空值的文档时出错