【问题标题】:Move manifest file to dll?将清单文件移动到 dll?
【发布时间】:2013-07-30 08:41:43
【问题描述】:

我在我的应用程序中使用了第三方组件,该组件作为 COM 组件分发,或者可以使用 .manifest 文件进行引用。无论哪种方式,它都是使用 CoCreateInstance() 加载的。第三方组件所需的文件位于子文件夹中。组件开发人员告诉我在可执行文件的 Visual Studio 2010 设置(在“Manifest”部分)中包含一个 .manifest 文件,并且加载组件没有问题。

现在我只使用 DLL 中的第三方组件来封装第三方组件中使用的功能。我正在使用 LoadLibrary() 动态加载 DLL。使用该组件仍然有效,我可以从引用清单文件的 EXE 加载的 DLL 中使用该组件。

为了进一步将 EXE 与第三方组件分开,我也想将清单移动到 DLL 中,这是唯一使用组件的地方。这样,我想编写的每个新 EXE 都可以使用 DLL 并间接使用这些功能。现在,我必须将 mainfest 添加到每个新的 EXE,但我不想这样做。

有没有办法将 EXE 使用的清单移动到 DLL 中?

【问题讨论】:

  • 你可以把manifest放到DLL中,但是不会自动激活。您需要使用激活上下文 API 手动执行此操作。
  • 强迫我们猜测清单包含的内容有点毫无意义。但是你试图把马放在车后的可能性很高,只有当 EXE 知道在哪里寻找它时才能找到 DLL。这要求清单条目存在于 EXE 中。如果你把它放在DLL中,那么EXE找不到DLL所以也找不到清单。
  • EXE 动态加载 DLL,我应该提到这一点。加载 DLL 有效,但 DLL 内的 CoCreateInstance() 调用失败。
  • @HansPassant 应该是免注册 COM。
  • @DavidHeffernan 为什么不将您的评论作为答案,我还没有尝试过,但这似乎是正确的做法。添加到mazecomputer.com/sxs/help/sxsapi3.htm 的链接以获得良好的衡量标准:)

标签: c++ visual-studio winapi com manifest


【解决方案1】:

您可以将清单放在 DLL 中,但它可能不会自动激活。您可能需要使用激活上下文 API 手动执行此操作。我认为很大程度上取决于清单的用途。我怀疑您正在尝试使用免注册 COM,但这只是猜测。

无论如何,这些链接可能对您很有用:

【讨论】:

  • 它确实有效!它是免费注册的 COM,我还不知道,否则我会提到它。当我使用 MFC 时,我必须添加一些对 AFX_MANAGE_STATE(AfxGetStaticModuleState()); 的调用。不要混淆也执行激活上下文切换的 comctl32.dll 函数调用。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-05-21
  • 2012-04-03
  • 1970-01-01
  • 1970-01-01
  • 2012-08-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多