VBA同模块存在InvokeQueryInterface仍报方法或数据成员未找到错误
问题根因
编译错误的触发原因是参数类型不匹配,具体逻辑如下:
- 你定义的
InvokeQueryInterface函数第一个参数要求是ByVal this As LongPtr指针类型 - 报错行传入的第一个参数
this是IUnknown接口对象类型,没有做指针转换,VBA编译器找不到参数签名匹配的InvokeQueryInterface实现,因此抛出「Method or Data Member Not Found」错误。
修复方案
将报错行的第一个参数用ObjPtr()函数转换为对象指针即可匹配参数要求,修改后的代码行如下:
ElseIf InvokeQueryInterface(ObjPtr(this), riid, ppvObject, defaultQIfunction) = S_OK Then
补充说明
VBA编译时的方法匹配会严格校验参数的数量、类型、传递方式(ByVal/ByRef),哪怕函数名称完全一致,只要参数列表不匹配,编译器就会判定找不到对应的方法成员,这种场景下不会触发隐式类型转换,必须手动完成对象到指针的转换。
内容的提问来源于stack exchange,提问作者Greedo
相关产品推荐
相关产品推荐

