c++ - 如何将 COM 方法作为函数参数传递?和 Microsoft 编译器错误 C3867

标签 c++ com function-pointers

我想将 COM 方法作为函数参数传递,但出现此错误(Microsoft (R) 32 位 C/C++ 优化编译器版本 15.00.30729.01 for 80x86):

错误 C3867:“IDispatch::GetTypeInfoCount”:函数调用缺少参数列表;使用 '&IDispatch::GetTypeInfoCount' 创建指向成员的指针

我错过了什么?

非常感谢。

#include <atlbase.h>

void update( HRESULT(*com_uint_getter)(UINT*), UINT& u )
{
   UINT tmp;
   if ( S_OK == com_uint_getter( &tmp ) ) {
      u = tmp;
   }
}

// only for compile purpose, it will not work at runtime
int main(int, char*[])
{
   // I choose IDispatch::GetTypeInfoCount just for the sake of exemplification
   CComPtr< IDispatch > ptr;
   UINT u;
   update( ptr->GetTypeInfoCount, u );
   return 0;
}

最佳答案

看起来像一个直接的 C++ 问题。

您的方法需要一个指向函数的指针。

你有一个成员函数 - (它不同于函数)。

通常您需要:
1. 将要传递的函数更改为静态。
2. 将预期的指针类型更改为成员函数指针。

处理成员函数指针的语法不是最好的...

一个标准的技巧是 (1) 然后显式传递对象 this 指针 作为参数允许您调用非静态成员。

关于c++ - 如何将 COM 方法作为函数参数传递?和 Microsoft 编译器错误 C3867,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/423730/

相关文章:

c++ - freeglut 如何探测 X11 服务器是否可用?

c++ - QueryInterface 因 E_ACCESSDENIED 失败

c++ - 根据需求在 C++ 中定义函数原型(prototype)

C++11:函数指针表、Lambdas

c++ - 如何在 Windows 中没有控制台窗口的情况下从 C++ 应用程序中删除文件?

c++ - 在 C++ 中使用继承时避免不必要的函数声明/定义

c# - 将 WinForm 应用程序限制为具有多个实例的一个进程

c - 不需要在结构中的函数指针声明中指定参数的 C99 是否正确?

c++ - g++,创建用于分发的静态库

c++ - 使用 MinGW 构建 ActiveQt (COM) 应用程序