将 32 位 COM 接口转换为 64 位

问题描述 投票:0回答:1

我正在尝试转换/升级 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

我希望我提供了足够的信息。 如果有任何其他信息可以帮助解决此问题,请告诉我。

com c++17 visual-studio-2019
1个回答
0
投票

如果iid与查询的接口的IID匹配,则调用func指定的函数。函数的声明应该是:

HRESULT WINAPI func(void* pv, REFIID riid, LPVOID* ppv, DWORD_PTR dw);

更多信息请参考这个官方文档:

https://learn.microsoft.com/en-us/cpp/atl/reference/com-interface-entry-macros?view=msvc-170#remarks-10

© www.soinside.com 2019 - 2024. All rights reserved.