我想将 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/