Я пытаюсь преобразовать/обновить 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);
Для получения дополнительной информации обратитесь к этому официальному документу:
Спасибо. Это также работает с 32-битной скомпилированной версией.
Сделайте последний параметр
DWORD_PTR