gpt4 book ai didi

c++ - 实例化 COM 对象时出错

转载 作者:行者123 更新时间:2023-11-28 04:00:26 25 4
gpt4 key购买 nike

目前我正在努力尝试在我制作的简单系统上使用 COM dll。一切都编译成功,但在运行时 CoCreateInstace 返回 S_OK,但不知何故我的对象指针返回 NULL。

这个接口(interface)指针是在我的类头上创建的。最奇怪的是,在方法堆栈上实例化相同的指针类型会生成正确的对象,但随后对 __hook 的调用会在尝试创建 BASE com 类时引发访问冲突。

其他一些可能有用的方面:

  • 尝试以 COINIT_MULTITHREADED 和 COINIT_APARTMENTTHREADED 启动 CoInitalizeEx 来运行程序

  • 该项目是一个dll,其中使用了COM dll

  • 我在没有启动新线程的情况下尝试了相同的方法,但错误仍然存​​在

  • 我制作了一个测试程序(无线程,可执行),对象正常创建,并正确挂接。所以我猜这与它本身是一个 DLL 或与线程相关。

PS:作为奖励问题,为什么 google 不返回与 COM 相关的任何有利信息? :)

最佳答案

这听起来像是 COM 对象的 IUnknown::QueryInterface 实现中的错误 - 没有设置输出指针而是返回 S_OK。

进程内服务器的 CoCreateInstance 基本上是:

  • 将DLL载入内存
  • 调用DllGetClassObject获取类工厂
  • 从分配新对象的类工厂调用 IClassFactory::CreateInstance
  • 在新对象上调用 IUnknown::QueryInterface 以获得所需的接口(interface)。

在任何步骤返回 NULL 但返回 S_OK 都会导致崩溃,但最后的 QI 调用除外。

关于c++ - 实例化 COM 对象时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1041194/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com