免注册COM和DLL位置

时间:2015-10-05 10:39:49

标签: c# c++ winapi com

我的C ++应用程序需要与Web应用程序通信。由于用C ++编写很难,我在C#(DLL)中编写了Web应用程序客户端,COM启用了它,并从C ++应用程序调用它并且它起作用。

但C ++应用程序可以安装在服务器PC上,其文件夹通过网络共享,映射到客户端PC上的驱动器,然后从那里运行。当我尝试运行时,它不会运行,因为它期望C#DLL在客户端PC上注册。我想避免它。我想将它们都保存在服务器上。是否可以使用免注册COM进行?如果是,可以将C#DLL(及其相关DLL)放在与C ++ EXE文件夹不同的文件夹中吗?

1 个答案:

答案 0 :(得分:1)

我看到这是一篇过时的帖子。希望您找到解决方案或解决方法。无论如何,我会回答,因为它可以帮助有同样问题的人。

  

是否可以使用免注册COM进行操作?

是的,确实如此。请遵循此MSDN article。您必须为c#com dll创建清单并将清单嵌入其中。这将是在RT_MANIFEST资源的帮助下。那篇文章有点过时了,所以你可能会遇到.net框架版本的问题。如果您这样做,则需要在计算机中指定.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文件夹不同?

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

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属性可以包含路径),有关详细信息和其他元素,请参阅this

希望这有助于某人。