主题:[讨论]vb对OCX,DLL的调用顺序
yzx
[专家分:370] 发布于 2008-05-05 20:19:00
(1)程序Test.exe 引用了 A.OCX,B.OCX 两个控件
(2)将A.OCX,B.OCX两个控件与Test.exe放在同一目录中
(3)将A.OCX,B.OCX两个控件同时放在系统目录中(System或System32)
请问,在这种情况下Test.ext启动时,调用的A,B两个控件,是放在系统目录中的,还是跟程序
放在同一目录的?
因为在实际操作中,发现将A.OCX和B.OCX两个控件与程序放在一起的时候,程序可以正常运行,
所以,上面所说的情况,并没有对两个控件进行注册(不管是同一目录的,还是放在系统目录中
的,但搞不清楚程序调用控件的时候是按什么方法或者说是按什么顺序来的)。
诚望各位前辈指教!!!!
回复列表 (共8个回复)
沙发
一江秋水 [专家分:9680] 发布于 2008-05-06 07:04:00
这与你编程时,第三方控件放在哪里有关。当你使用第三方控件时,必然要在工程->部件中查找并勾选它,这时它的位置,就决定了正式使用该程序时它应该在哪里。根据你说的情况,这两个控件应与Test.exe放在同一目录中。
板凳
yzx [专家分:370] 发布于 2008-05-06 10:09:00
是的,谢谢你的回复,在本机上的确是这样,但如果是以下这种情况又是什么顺序呢?
(1)程序打包后交给用户使用,假如用户把Test.exe与及控件A.OCX、B.OCX都放在
“c:\TEST”目录中
(2)同时,客户的系统目录(system,system32)已经存在A.OCX和B.OCX这两个控件
那么,在这种情况下,Test.exe运行的时候,调用的是系统目录下,还是“c:\TEST”目录
中的两个控件呢?
(3)补充说明,程序Test.exe运行的时候,并没有对同一目录下的A.OCX和B.OCX这两个控
件进行注册,换句话讲,就是Test.exe本身并没有对A.OCX和B.OCX进行注册的功能,而
客户系统目录中已存在的A.OCX、B.OCX是否已注册并不清楚
3 楼
一江秋水 [专家分:9680] 发布于 2008-05-06 14:25:00
(2)的情况调用的是“c:\TEST”目录中的两个控件
(3)程序本身没有注册控件,系统在大多数情况下会自动注册,你只要到没有装VB的机上试一下就知道了
4 楼
yzx [专家分:370] 发布于 2008-05-06 17:13:00
按这样看的话,应该是先找同目录下有没有相应的控件,如果没有,再去系统目录中寻找。
不过,我听说,好象有个什么路径表的,系统是按这个路径表的顺序去寻找控件的,不知对不对。
5 楼
一江秋水 [专家分:9680] 发布于 2008-05-06 20:46:00
“先找同目录下有没有相应的控件,如果没有,再去系统目录中寻找”,不是这样的,而是只找一次,在你编译工程时,这个路径就编译进去了,你用记事本找开工程文件可以看到类似下面这样的句子:
Object={F9043C88-F6F2-101A-A3C9-08002B2F49FB}#1.2#0; COMDLG32.OCX
你再按它的类ID或文件名到注册表中去找,都能找到,那就是说,在没有VB的机器上只要运行一遍VB程序,系统就会根据这个信息自动注册(注册后就形成了你所说的“路径表”),当然,前提是在相应路径中必须有这个控件文件
6 楼
yzx [专家分:370] 发布于 2008-05-07 09:53:00
那么就是说,如果客户端已存在程序要用到的控件,并且已注册,那么,程序调用的控件就
应该是客户端注册过的控件,而不是与程序放在同一目录中的控件,对吗?
若客户端不存在要用到的控件,或客户端的控件还没有注册,那么,系统会自动查找程序所
在的目录中是否存在相应控件,有的话,就自动进行注册,对吗?
7 楼
一江秋水 [专家分:9680] 发布于 2008-05-07 14:17:00
如果客户端已存在程序要用到的控件,并且已注册,但如果注册的路径与你程序中编译的路径不相同,程序将仍然找不到这个控件。
若客户端的控件还没有注册,那么,系统会自动根据程序中所编译的路径查找相应的目录中是否存在
相应的控件,有的话,就自动进行注册。
哈哈,简直象绕口令了!
8 楼
yzx [专家分:370] 发布于 2008-05-07 20:56:00
明白了,谢谢你了,一江秋水!
我来回复