【问题标题】:c++ use LoadLibrary to load winapi interfaces from dlls [closed]c ++使用LoadLibrary从dll加载winapi接口[关闭]
【发布时间】:2018-08-19 21:04:33
【问题描述】:

如何使用这个函数从dll加载像ishelllink这样的winapi接口,我已经可以正常加载winapi函数没有问题了

【问题讨论】:

  • ishelllink 是一个 COM 接口 看看msdn.microsoft.com/en-us/library/windows/desktop/… 中列出的 DLL 但可能更容易正常使用 COM。还有这个:blogs.msdn.microsoft.com/oldnewthing/20040205-00/?p=40733
  • 很难知道你在这里问什么。为什么不能使用这些 COM 接口?
  • 这听起来像XY Problem。您实际上想解决什么问题?
  • 您是否想了解CoCreateInstance 的工作原理?鉴于它(必须)利用 LoadLibraryGetProcAddress?
  • 您无法从 DLL 加载接口。您可以加载一个服务器 DLL,并请求它的类工厂代表您构造一个接口实现。所以写出来,这个问题真的没有多大意义,可能是没有完全理解COM的结果。

标签: c++ winapi dll interface loadlibrary


【解决方案1】:

IShellLink 是一个 COM 接口。你不使用LoadLibrary() 来访问COM 对象,你需要使用CoCreateInstance() 来代替。 MSDN 上的Using Shell Links 文档中有一个代码示例。

【讨论】:

  • 我知道它是一个 com 接口,我已经可以使用它,但我只给出了接口的示例,我希望能够在运行时动态获取它们
  • @prog511:如果这是你想要完成的,你将不得不重新发明注册表。以及 COM 基础架构的很大一部分:CoGetClassObject。这听起来很像你还没有完全理解 COM。您真正想在这里完成什么?
  • @prog511 "我希望能够在运行时动态获取它们" - CoCreateInstance() IS 如何在运行时动态获取它们
  • 好的,我现在明白了!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-02
相关资源
最近更新 更多