按照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个不同对象了
后注册的会吧前注册的注册信息覆盖掉,也就是说你同一时间只能用一个。例如,你的dll在编译的时候,输出目标变了,但文件同名。并且未设置任何兼容。
那么,这个时候就会产出楼主说的两个同名同类的dll,并且guid不同。
这个时候肯定是后编译的哪个被注册了。
Set o = CreateObject("MyProject.TestClass")
与
Set o = CreateObject("MyProject2.TestClass")
来访问2个不同对象了
例如,先注册了A.DLL,B.DLL(工程名和类名称都一致)
即用ProgID访问的话,只能访问B.DLL
解决的方法:用GUID来访问COM,就不存在ProgID冲突的问题了。
dim obj as object
CoCreateInstance "{00000535-0000-0010-8000-00AA006D2EA4}",0,1,iid_iunknown,obj
dim iid_class as guid
CoCreateInstance iid_class,0,1,iid_iunknown,obj