被拉去维护VB6代码,要将几个控件打包成一个OCX,当中引用了几个*.TLB,遭遇到:同名的接口,参数却不同,怎么破?

myfav myfav 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
一个控件引用olelib.tlb,另一个控件引用oleguids3.tlb。
可怕的是,这两个tlb都兢兢业业、勤勤恳恳地实现了一堆同名的接口:

IoleClientSite
IoleControlSite
IoleInPlaceActiveObject
IoleInPlaceFrame
IoleInPlaceSite
IoleInPlaceUIWindow
IoleObject
IoleWindow
IUnknown

然而,两个tlb定义接口的参数却完全不同!
试图打包生成OCX时,重名的接口,不同控件的调用,便乱成了一锅粥!
举个例子:
A控件原本引用oleguids3.tlb的IoleObject、IoleInPlaceActiveObject、IoleInPlaceSite,一切正常;
B控件原本引用olelib.tlb的IoleObject、IoleInPlaceActiveObject、IoleInPlaceSite,也一切正常;
然而打包到一个工程之后,似乎有且只有一个IoleObject、IoleInPlaceActiveObject、IoleInPlaceSite是优先使用的,于是就变成了:
A控件错误地引用了olelib.tlb的IoleObject、IoleInPlaceActiveObject、IoleInPlaceSite,一切完全不正常了!

有没办法指定A控件引用且只能引用oleguids3.tlb的重名接口?比方说,VB有没有类似这样的语法:
olelib :: IoleObject、olelib :: IoleInPlaceActiveObject、olelib :: IoleInPlaceSite
oleguids3 :: IoleObject、oleguids3 :: IoleInPlaceActiveObject、oleguids3 :: IoleInPlaceSite
即,用“命名空间”来区分接口呢?

求救大侠们,有没有办法解决这种重名问题?
...全文
评论 7
收藏 已收藏
分享
返回顶部
myfav
COM/DCOM/COM+ 864 成员 3,658 内容