繁体   English   中英

免注册的COM和DLL位置

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM