[英]Registration-free COM and DLL location
我的C ++应用程序需要与Web应用程序通信。 由于用C ++编写很难,所以我用C#(DLL)编写了Web应用程序客户端,COM启用了它,并从C ++应用程序中调用了它,然后它起作用了。
但是C ++应用程序可以安装在服务器PC上,其文件夹通过网络共享,映射到客户端PC上的驱动器,然后从那里运行。 当我尝试运行时,它无法运行,因为它期望在客户端PC上注册C#DLL。 我想避免它。 我想将它们都保留在服务器上。 是否可以使用免注册COM来做到这一点? 如果是,是否可以将C#DLL(及其相关DLL)放置在与C ++ EXE文件夹不同的文件夹中?
我看到这是过时的帖子。 希望您找到了解决方案或解决方法。 无论如何,我会回答,因为它可能会帮助遇到相同问题的人。
是否可以使用免注册COM来做到这一点?
是的。 遵循此MSDN文章 。 您将必须为c#com dll创建一个清单,并将清单嵌入其中。 这将在RT_MANIFEST资源的帮助下进行。 该文章有些过时,因此您可能会遇到.net Framework版本的问题。 如果这样做,则需要在计算机中指定.net框架版本。 您可以简单地用以下命令替换clrclass行:
<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
属性可以包含路径),有关更多详细信息和其他元素,请参见此处 。
希望这对某人有帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.