我的C ++应用程序需要与Web应用程序通信。由于用C ++编写很难,我在C#(DLL)中编写了Web应用程序客户端,COM启用了它,并从C ++应用程序调用它并且它起作用。
但C ++应用程序可以安装在服务器PC上,其文件夹通过网络共享,映射到客户端PC上的驱动器,然后从那里运行。当我尝试运行时,它不会运行,因为它期望C#DLL在客户端PC上注册。我想避免它。我想将它们都保存在服务器上。是否可以使用免注册COM进行?如果是,可以将C#DLL(及其相关DLL)放在与C ++ EXE文件夹不同的文件夹中吗?
答案 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
希望这有助于某人。