如何获取某些Visual Basic 6控件的IUnknown *指针(如果有的话)?

时间:2011-04-21 08:07:33

标签: c windows com vb6

我想从一个带有IUnknown*的Visual Basic 6程序中调用一些C函数。假设我知道我的VB6应用程序中的某些控件是ActiveX控件,我是否可以从中获取基础IUnknown*(可能通过转换?)将其传递给C函数?

2 个答案:

答案 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控件都是如此?