例如,2个COM 都叫A.DLL,但是各自的GUID不同,里面提供的公共方法都一样,只是由不同的用户制作的,所以可能同名。问题是:现在要集中在1台机器上使用这2个同名的COM组件(ActiveX DLL),如何解决这个问题?

解决方案 »

  1.   

    你这样做是不符合COM规则......
      

  2.   

    这个问题嘛,肯定是哪个后注册的哪个就能用。
    后注册的会吧前注册的注册信息覆盖掉,也就是说你同一时间只能用一个。例如,你的dll在编译的时候,输出目标变了,但文件同名。并且未设置任何兼容。
    那么,这个时候就会产出楼主说的两个同名同类的dll,并且guid不同。
    这个时候肯定是后编译的哪个被注册了。
      

  3.   

    请问如何解决这个问题.就是如何防止同名的问题?绿豆请解释一下,你这样做是不符合COM规则...... ???如果在制作COM时候,如果工程名和类名称都一致的话,把其中一个文件名改了真的可以吗??
      

  4.   

    按照COM规则的话,如果你对一个接口进行了更改,你应该另外重新建个接口并在原先接口名字的后面加上数字以示区别(比如IView,IView2,IView3),同时原先的接口应该被保留当然,以你目前的情况来说只能换个取巧的方式来解决了首先,你分别将两个A.Dll都用regsvr32注册一下,如果它们的GUID不同,那么它们就会在注册表的HKEY_CLASSES_ROOT下面生成一个你组件ProgID的子键(比如 MyProject.CTestClass),并同时在HKEY_CLASSES_ROOT\CLSID下面生成2个不同的子键接下来,你在HKEY_CLASSES_ROOT下面再创建一个ProgID子键(例如MyProject2.CTestClass),在这个键下面再建个Clsid键,把里面的默认值改为你第1个注册的a.dll的GUID这样,你在自己程序里就可以分别用
    Set o = CreateObject("MyProject.TestClass")

    Set o = CreateObject("MyProject2.TestClass")
    来访问2个不同对象了
      

  5.   

    如果工程名和类名称都一致的话就是后注册的有效,
    例如,先注册了A.DLL,B.DLL(工程名和类名称都一致)
    即用ProgID访问的话,只能访问B.DLL
    解决的方法:用GUID来访问COM,就不存在ProgID冲突的问题了。
      

  6.   

    楼上的请解释一下如何用用GUID来访问COM,就不存在ProgID冲突的问题了???
      

  7.   

    用COM API来创建COM对象,就不能用CreateObject了
      

  8.   

    类似于这样
    dim obj as object
    CoCreateInstance "{00000535-0000-0010-8000-00AA006D2EA4}",0,1,iid_iunknown,obj
      

  9.   

    第1个参数其实也应该是个GUID类型,为了说明起见,我才写了个字符型的实际上应该这样dim obj as object
    dim iid_class as guid
    CoCreateInstance iid_class,0,1,iid_iunknown,obj
      

  10.   

    麻烦解释一下如何在vb6中使用CoCreateInstance函数,需要引用什么库??
      

  11.   

    总算找到了API的声明了,大虾要是说清楚些就更好了!thankshttp://www.vbforums.com/showthread.php?t=367342