我正在尝试转换/升级 32 位 COM 文件以编译为 64 位。 我已经修复了除一个之外的所有错误。 这是有问题的代码:
HRESULT WINAPI QueryIMEDDevice(void *pV, REFIID riid, LPVOID *pPV, DWORD dw)
{
return DTQueryIMEDDevice(reinterpret_cast<CNIDAQmx *>(pV), riid, pPV, dw);
}
BEGIN_COM_MAP(CNIDAQmx)
COM_INTERFACE_ENTRY(INIDAQmx)
COM_INTERFACE_ENTRY(IObjectControl)
COM_INTERFACE_ENTRY(IObjectConstruct)
COM_INTERFACE_ENTRY(ISpecifyPropertyPages)
COM_INTERFACE_ENTRY(ISupportErrorInfo)
COM_INTERFACE_ENTRY_FUNC_BLIND(0, QueryIMEDDevice)
COM_INTERFACE_ENTRY2(IDispatch, IMEDADC)
COM_INTERFACE_ENTRY(IMEDADC)
END_COM_MAP()
这是错误消息:
error C2440: 'initializing': cannot convert from 'HRESULT (__cdecl *)(void *,const IID &,LPVOID *,DWORD)' to 'ATL::_ATL_CREATORARGFUNC (__cdecl *)'
message : None of the functions with this name in scope match the target type
我希望我提供了足够的信息。 如果有任何其他信息可以帮助解决此问题,请告诉我。
如果iid与查询的接口的IID匹配,则调用func指定的函数。函数的声明应该是:
HRESULT WINAPI func(void* pv, REFIID riid, LPVOID* ppv, DWORD_PTR dw);
更多信息请参考这个官方文档: