Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何集中VB6 dll引用的.net dll(com互操作)_Dll_.net 4.0_Vb6_Dllregistration - Fatal编程技术网

如何集中VB6 dll引用的.net dll(com互操作)

如何集中VB6 dll引用的.net dll(com互操作),dll,.net-4.0,vb6,dllregistration,Dll,.net 4.0,Vb6,Dllregistration,一个VB6程序员给了我一个要求(是的,他们仍然存在)。存在一个使用vb6 dll的vb6应用程序,该dll现在使用一个.net dll,而inturn使用另一个.net dll。现在我的要求是.net dll的工作方式应与vb dll的工作方式相同,即一旦注册了vb6 dll,它就可以被其他应用程序使用,并且在推出时不需要包括在内(有人告诉我)。是否有方法放置我的.net DLL,以便其他vb6应用程序可以使用它。据我所见,只有当.net DLL与vb6 exe位于同一文件夹中时,此选项才有效

一个VB6程序员给了我一个要求(是的,他们仍然存在)。存在一个使用vb6 dll的vb6应用程序,该dll现在使用一个.net dll,而inturn使用另一个.net dll。现在我的要求是.net dll的工作方式应与vb dll的工作方式相同,即一旦注册了vb6 dll,它就可以被其他应用程序使用,并且在推出时不需要包括在内(有人告诉我)。是否有方法放置我的.net DLL,以便其他vb6应用程序可以使用它。据我所见,只有当.net DLL与vb6 exe位于同一文件夹中时,此选项才有效

我读过这个


谢谢

COM因其DLL地狱问题而臭名昭著。计算机上所有程序的注册都是全局的。因此,替换DLL通常会破坏使用COM服务器的其他程序

.NET对此有一个反措施,当您运行Regasm.exe注册[ComVisible].NET程序集时,默认情况下它将假定您将该程序集放入GAC中。自动购买DLL地狱保护。然而,使用/codebase选项注册程序集并不少见,尤其是在您的开发人员机器上,而且也是由IDE完成的

但是,现在您将遇到一个新问题,CLR没有良好的机制来定位依赖的.NET程序集。探测路径基于COM客户端EXE。这就是为什么要将依赖程序集复制到EXE安装目录中

这对于测试来说很好,但不是部署服务器时想要使用的好的通用解决方案。您无法准确预测EXE将使用COM服务器的内容及其所在位置。而搞乱别人拥有的程序的安装目录在政治上往往是困难的

使用GAC,所有问题都解决了。

我喜欢“政治困难”这句话。有趣的是,在大公司的编程中有很多政治因素。这是管理不善的结果。