我自己写了一个 ACTIVEX DLL,里面的工程属性的“版本兼容”只能选择“不兼容”,不可以 选择“二进制兼容”,然后就是想知道有没办法在ACTIVEX DLL里写一个宏 对自身进行检测是否注册。如果没有注册就进行自身注册。
请有空的老师指点我下,谢谢

解决方案 »

  1.   

    为什么不能选择“二进制兼容”?
    另外,注册表中去找DLL是否已经注册!
    即便是注册了,你还可以用:regsvr32 /u...取消注册.
      

  2.   

    虽然注册的函数DllRegisterServer由VB自动写进了DLL文件,但由于DLL文件本身不能运行,需要一个可执行文件来调用,因此,在调用之前,DLL本身无法运行起来判断是否注册的。而在调用时,如果没有注册,则可执行文件会调用失败,DLL文件还是无法运行起来进行判断,所以,必须在DLL外部的可执行文件中判断该DLL是否注册,DLL本身是做不到的。
      

  3.   

    没正儿八经地用VB写过ActiveX DLL(一直用ATL),不太了解原因,不过你可以参考一些文档,如:
    http://topic.csdn.net/t/20020702/15/844167.html
      

  4.   

    1、ActiveX Dll不能独立运行,以部件的形式给应用程序提供服务。
    2、在ActiveX Dll内部检测自身有没有注册没有任何意义,因为既然它已经在工作了,就说明它已经注册了。
    3、我想你的需求可以这样来实现:在使用ActiveX Dll的应用程序中:on error resume nextdim objThis   as objectset objThis = createobject("TestDll.class1")   ' class1 为 Dll中的一可实例化的类if objThis is nothing then
       ' 在此处注册,注册的方法有好几种,此处略...
       '...
    end if
      

  5.   

    on error resume nextdim objThis   as objectset objThis = createobject("TestDll.class1")   ' class1 为 Dll中的一可实例化的类if objThis is nothing then
       ' 在此处注册,注册的方法有好几种,此处略...
       '...
    end if 
    如果没有被注册,这段代码根本运行不了.
    如果已经注册,判断又有什么意义?
    省略的代码可用shell "regsvr32 " & App.EXEName