被拉去维护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
即,用“命名空间”来区分接口呢?

求救大侠们,有没有办法解决这种重名问题?
...全文
478 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
myfav 2020-11-12
  • 打赏
  • 举报
回复
非常感谢大侠的提示!我拿“对象浏览器”查看了一下,果真有陷阱!——文件名并不等于库名!哈哈哈哈。
舉杯邀明月 2020-11-11
  • 打赏
  • 举报
回复
注意看一下,已经执行到函数体中了。
如果有“变量类型未定义”的问题,是不能正确启动程序的。
(实际我是在那儿设置了断点,然后“全编译执行”后中断的。)

所以说,用正确的“库.类型”形式来定义变量,是完全合法的。
舉杯邀明月 2020-11-11
  • 打赏
  • 举报
回复
你要弄清楚你的“类库名”是什么。
oleguids3.tlb 的文件名是“oleguids3”;
 但任意tlb的“类库名”未必是跟文件名相同!

它们可能相同,也可以“完全不同”的。
具体是什么,可以通过对象浏览器来查看一下。
给你一个截图,参考一下。
myfav 2020-10-26
  • 打赏
  • 举报
回复
引用 2 楼 舉杯邀明月 的回复:
解决方法也很简单,在变量定义时,指定 “库.类型”就行了。 楼主也可以试一下在那些“接口名”前强制指定是哪个库的接口。
非常感谢您的指教!不过我反复试验了好多遍,类似以下语句皆无法通过编译: Dim pOleObject As oleguids3.IOleObject 或 Dim pOleObject As oleguids3.tlb.IOleObject 都不行!在编译时,VB6永远会弹出错误提示: 编译错误: 用户定义类型未定义 应该如何写“库.类型”,您能否举一两个例子?非常感谢!
无·法 2020-10-26
  • 打赏
  • 举报
回复
现在还在维护的vb系统应该是上世纪残留的了吧
舉杯邀明月 2020-10-25
  • 打赏
  • 举报
回复
我还没遇到过你这样的“接口冲突”,
不过我的一个软件中遇到过“数据类型”冲突。

其实在tlb和模块中的“同名数据类型”的定义是完全一样的,
 但编译时他会提示“类型不匹配”。 
解决方法也很简单,在变量定义时,指定 “库.类型”就行了。
(不过最终的方案是把模块中的“重名类型”定义给删除了)

楼主也可以试一下在那些“接口名”前强制指定是哪个库的接口。
脆皮大雪糕 2020-10-23
  • 打赏
  • 举报
回复
控件A控件B分别编译,然后新建控件C分别引用控件A和B进行展现。 然后应用只要引用控件C就完成了……

863

社区成员

发帖
与我相关
我的任务
社区描述
VB COM/DCOM/COM+
c++ 技术论坛(原bbs)
社区管理员
  • COM/DCOM/COM+社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧