首页 新闻 会员 周边 捐助

vs2010报错,error2440

0
悬赏园豆:100 [已解决问题] 解决于 2024-09-20 09:09

类型转换问题,无法从BOOL转成AFX_PMSG
error C2440: “static_cast”: 无法从“BOOL (__thiscall CMakeDLJZ:😗 )(void)”转换为“AFX_PMSG”

ON_BN_CLICKED(IDC_BTN_MDLJZ_JS, OnBtnMdljzJs)

下面是函数定义

BOOL CMakeDLJZ::OnBtnMdljzJs()
{
return TRUE;
}

这个怎么修改啊,我下面还有个函数要用到这个函数的BOOL返回值
直接把上面的返回值修改了,下面的代码有报错了

zolizoli的主页 zolizoli | 初学一级 | 园豆:119
提问于:2023-03-23 10:54
< >
分享
最佳答案
0

根据您提供的信息,您需要将返回BOOL的函数转换为AFX_PMSG,因为AFX_PMSG是一个指向AFX_MSG结构的指针,而AFX_MSG结构包含一个消息处理函数的指针和一个消息ID。要将BOOL转换为AFX_PMSG,您需要创建一个AFX_MSG结构并将其中的消息处理函数指针设置为您的BOOL函数。

下面是一个示例代码:

BOOL CMakeDLJZ::OnBtnMdljzJs()
{
return TRUE;
}

LRESULT CMakeDLJZ::OnBtnMdljzJs(WPARAM wParam, LPARAM lParam)
{
return OnBtnMdljzJs();
}

void CMakeDLJZ::SomeOtherFunction()
{
// 调用 OnBtnMdljzJs() 函数
AFX_PMSG pfn = static_cast<AFX_PMSG>(&CMakeDLJZ::OnBtnMdljzJs);
BOOL bResult = (*pfn)(this, 0);
}
在上面的代码中,我们定义了一个新的函数OnBtnMdljzJs来返回LRESULT类型的值,并将其转换为AFX_PMSG类型。然后,我们可以在SomeOtherFunction中使用pfn来调用OnBtnMdljzJs函数,并且返回的BOOL值可以赋值给变量bResult。

请注意,您需要在类的头文件中声明OnBtnMdljzJs函数,并在消息映射表中将其与IDC_BTN_MDLJZ_JS控件的BN_CLICKED消息关联起来。

收获园豆:100
Technologyforgood | 大侠五级 |园豆:7541 | 2023-03-30 19:06
其他回答(3)
0

您可以尝试使用static_cast将BOOL类型转换为AFX_PMSG类型,如下所示:

AFX_PMSG pMsg = static_cast<AFX_PMSG>(&CMakeDLJZ::OnBtnMdljzJs);

请注意,这种类型转换可能会导致未定义的行为,因此请谨慎使用。如果您不确定如何进行类型转换,请参考C++类型转换的相关文档。

另外,您在修改OnBtnMdljzJs函数的返回值时,需要确保修改后的返回值类型与调用该函数的函数所期望的返回值类型相同。如果不同,就会导致编译错误。在这个例子中,您可以将OnBtnMdljzJs函数的返回值类型修改为AFX_PMSG,然后在调用该函数的地方使用相应的类型来接收返回值,如下所示:

AFX_PMSG pMsg = OnBtnMdljzJs(); if (!pMsg) { return; }

这样可以确保类型转换正确,并且不会导致编译错误。

新* | 园豆:271 (菜鸟二级) | 2023-03-23 14:07
0

这个错误是因为您试图将一个函数指针转换为无法执行的类型。AFX_PMSG实际上是一个指向类成员函数的指针类型,而BOOL是一个返回布尔值的类型。两者之间没有直接的类型转换关系,所以需要进行一些额外的处理。

解决这个问题的方法之一是使用一个中间函数来将OnBtnMdljzJs函数的返回值从BOOL类型转换为AFX_PMSG类型。您可以将中间函数的返回类型声明为AFX_PMSG,并在函数中调用OnBtnMdljzJs函数并返回转换后的结果。以下是一个可能的解决方案:

AFX_PMSG CMakeDLJZ::GetMdljzJsHandler()
{
    BOOL result = OnBtnMdljzJs();
    return static_cast<AFX_PMSG>(result);
}

然后,在其他函数中,您可以使用GetMdljzJsHandler函数来获取OnBtnMdljzJs的返回值,并将其作为AFX_PMSG类型使用:

void SomeOtherFunction()
{
    AFX_PMSG handler = GetMdljzJsHandler();

    // 然后您可以使用handler调用成员函数
}

希望这个解决方案能够帮助您解决问题。

薛小谦 | 园豆:195 (初学一级) | 2023-03-28 15:11
0

从错误信息来看,你在将一个成员函数指针转换为另一种成员函数指针类型时出现了问题。具体来说,你正在将一个返回 BOOL 类型的成员函数指针转换为一个返回 AFX_PMSG 类型的成员函数指针类型,这是不允许的。
为了解决这个问题,你需要做以下两个步骤:

  1. 修改函数返回类型:将 OnBtnMdljzJs 函数的返回类型从 BOOL 修改为 LRESULT,这是 AFX_PMSG 的返回类型。修改后的代码如下:
LRESULT CMakeDLJZ::OnBtnMdljzJs()
{
    return 0;
}
  1. 使用 STDMETHODIMP 宏:在函数定义前加上 STDMETHODIMP 宏以指示这是一个标准方法。修改后的代码如下:
STDMETHODIMP CMakeDLJZ::OnBtnMdljzJs()
{
    return 0;
}

这样,你就可以将 OnBtnMdljzJs 函数的成员函数指针转换为 AFX_PMSG 类型的成员函数指针类型了。同时,你可以继续在代码中使用 OnBtnMdljzJs 函数的返回值作为 BOOL 类型使用。

LuoCore | 园豆:122 (初学一级) | 2023-03-31 08:36
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册