我不是 C++ 专家,我在理解如何将函数指针/回调函数传递给方法时遇到了一些困难。回调定义如下
typedef HRESULT (CALLBACK *PFN_CREATE_XAMLOBJECT)(
IXRDependencyObject *pExistingXRDO,
UINT objectId
);
我也尝试通过它的方法定义如下(所有其他参数已删除)
virtual HRESULT STDMETHODCALLTYPE RegisterXamlObject(
__in PFN_CREATE_XAMLOBJECT pfXamlObjectCreation,
) = 0;
我定义传递的函数如下
HRESULT CreateFn(__in IXRDependencyObject *pExistingXRDO, UINT objectId)
{
return S_OK;
}
我正在尝试按如下方式传递函数指针。
&MyClass::CreateFn
出现以下错误
Error 3 error C2440: 'type cast' : cannot convert from 'HRESULT (__cdecl MyClass::* )(IXRDependencyObject *,UINT)' to 'PFN_CREATE_XAMLOBJECT'
如有任何帮助,我们将不胜感激。
最佳答案
这里有两个问题。
首先,函数指针不能指向成员函数,因为成员函数需要一个this
指针来操作。您必须使成员函数static
,或使指针成为成员函数指针。
其次,函数指针和函数必须使用相同的调用约定。指针使用CALLBACK
,定义为__stdcall
。
这是一个修改后的函数:
static HRESULT CALLBACK CreateFn(IXRDependencyObject *pExistingXRDO,
UINT objectId)
{
return S_OK;
}
关于C++ 函数指针和回调函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8930152/