被拉去维护VB6代码,要将几个控件打包成一个OCX,当中引用了几个*.TLB,遭遇到:同名的接口,参数却不同,怎么破?
myfav 2020-10-23 12:16:48 一个控件引用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
即,用“命名空间”来区分接口呢?
求救大侠们,有没有办法解决这种重名问题?