我想从一个带有IUnknown*
的Visual Basic 6程序中调用一些C函数。假设我知道我的VB6应用程序中的某些控件是ActiveX控件,我是否可以从中获取基础IUnknown*
(可能通过转换?)将其传递给C函数?
答案 0 :(得分:3)
所有 COM接口派生自IUnknown
,您可以在任何有效的接口指针上使用IUnknown
方法。
如果您需要对同一组件的其他引用,但不关心使用哪个接口,请使用QueryInterface
的{{1}}方法。
答案 1 :(得分:0)
我在同时发现了一件有趣的事情(只是在有人发现这个问题的时候提到它):对于我测试过的许多控件,GWL_USERDATA
返回的GetWindowLong
值会产生一些结构的地址其中IUnknown
指针值位于偏移量12处。因此以下内容可能对您有用:
IUnknown *unk = (IUnknown *)((char*)GetWindowLong( hwnd, GWL_USERDATA ) + 12);
似乎许多控件在GWL_USERDATA
给出的地址处存储了相同的结构。也许对于所有Visual Basic控件都是如此?