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

我想从一个带有IUnknown*的Visual Basic 6程序中调用一些C函数。 假设我知道在我的VB6应用程序中的某个控件是一个ActiveX控件,我可以从底层的IUnknown* (也许通过转换?)将它传递给C函数吗?

所有的 COM接口都来自IUnknown ,你可以在任何有效的接口指针上使用IUnknown方法。

如果您需要额外的引用到相同的组件,但不关心哪个接口,然后使用QueryInterface方法IUknown

我发现了一个有趣的事情(只是提到它,以防有人发现这个问题):对于我测试的许多控件,由GetWindowLong返回的GWL_USERDATA值产生一些结构的地址,它具有位于偏移12的IUnknown指针值。以下可能适合你:

 IUnknown *unk = (IUnknown *)((char*)GetWindowLong( hwnd, GWL_USERDATA ) + 12); 

看来很多控件在GWL_USERDATA给定的地址上都存有相同的结构。 也许对于所有的Visual Basic控件来说都是如此?