近期做了个程序,引用了个开源的控件,结果工程中引用它后,导致每次换个机器就无法运行之前生成的exe,必须重新编译才行,搜索论坛,发现了个古董帖子上有个一摸一样的情况:http://topic.csdn.net/t/20031218/15/2577597.html问题是按照里面MSTOP的解释:1.在OCX或DLL中,所有具体定义的控件(除标准EXE的控件以外),一律用Object   代替.所有其它对象用Variant代替.在自定义类型中不能出现具体的类型.只能用Object   或   Variant   2.将   
        PUBLIC   TYPE   ....   
                      ....................   
        END   TYPE     
        放在一个类模块中去定义. 
我重新修改了下控件,还是存在同样的问题,希望大家指教。如果谁制作ocx遇到这方面问题有经验的希望留个邮箱,我把控件发过去,帮我看看到底哪个地方还需要修改?  

解决方案 »

  1.   


    这个在那个帖子中已经讨论过了,不是简单的注册的问题。附帖子地址:http://topic.csdn.net/t/20031218/15/2577597.html
      

  2.   

    可能你引用的那个控件被多次编译,又没有设置工程兼容属性。解决办法:变量定义为Object,然后使用CreateObject后期绑定;另外,在VB的类和控件中,不能直接使用UDT,可以使用一个类模拟UDT,或者在ODL文件里声明后编译成TLB并引用。
      

  3.   

      谢谢你的回复,我感觉可行,但实际操作中有些疑问,请指教~!   按照你提供的建议,我把控件工程中代码里所有的UDT都单独写到一个类模块中了,取名UDTclass,然后重新编译了下那个控件,选择了二进制兼容。然后生成了一个OCX叫my.ocx。
       然后在新建的工程中引用这个ocx,按你说的,进行后期绑定:
        dim a  as object
        set a = CreateObject("");我想问下,这个双引号里写什么呢?
      

  4.   

    my.ocx中的类的名称,比如类名为test,则为my.test
      

  5.   


    不行啊,提示429错误啊~~"ActiveX部件不能创建对象"~
    郁闷啦,lyserver有空帮我瞅一下吧,本身控件不是很复杂,只是没处理过,实在找不出问题所在~
    留个邮箱,我给你发过去好吧~~3Q~