免注册的COM和DLL位置

本文关键字:DLL 位置 COM 注册 | 更新日期: 2023-09-27 18:15:57

我的c++应用程序需要与web应用程序通信。由于用c++编写很难,我用c# (DLL)编写了web应用程序客户端,COM启用了它,并从c++应用程序调用它,它工作了。

但c++应用程序可以安装在服务器PC上,其文件夹通过网络共享,映射到客户端PC上的驱动器,并从那里运行。当我尝试运行时,它不会运行,因为它期望c# DLL在客户端PC上注册。我想避免它。我想把它们都保存在服务器上。有可能使用免注册的COM吗?如果是,c# DLL(及其依赖的DLL)可以放在一个文件夹不同于c++ EXE文件夹?

免注册的COM和DLL位置

我看这是一个过时的帖子。希望你已经找到了解决方案或变通方法。无论如何,我将回答,因为它可能帮助到有同样问题的人。

是否可以使用免注册的COM?

是的,它是。关注这篇MSDN文章。您必须为c# com dll创建一个清单,并将清单嵌入其中。这需要RT_MANIFEST资源的帮助。那篇文章有点过时了,所以你可能会遇到。net框架版本的问题。如果你这样做了,你需要在你的机器中指定。net框架的版本。您可以简单地将clclass行替换为:

<clrClass
            clsid="{16AD5303-E154-44B4-A72B-C129859714AD}"
            progid="SideBySide.SideBySide"
            threadingModel="Both"
            name="SideBySide.SideBySideClass"
            runtimeVersion="v4.0.30319" >

c# DLL(及其依赖的DLL)可以放在文件夹中吗不同于c++的EXE文件夹?

是的,它可以。但我不推荐。根据该资源,程序集加载程序按照以下顺序搜索程序集清单:

Side-by-side searches the WinSxS folder.
''<appdir>'<assemblyname>.DLL
''<appdir>'<assemblyname>.manifest
''<appdir>'<assemblyname>'<assemblyname>.DLL
''<appdir>'<assemblyname>'<assemblyname>.manifest

上述位置分别对应于应用程序(appdir)。如果您希望dll在其他地方,那么您可以使用程序集清单的file元素(name属性可以包含路径),请参阅此处了解更多详细信息和其他元素。

希望这能帮助到别人。