目前我正在努力尝试在我制作的简单系统上使用COM dll。一切都成功编译,但在运行时CoCreateInstace返回S_OK,但不知何故我的对象指针返回NULL。
此接口指针在我的类标题上创建。最奇怪的是,在方法堆栈上实例化这个相同的指针类型会产生正确的对象,但是在尝试创建BASE com类时,后续调用__hook会打开访问冲突。
可能有用的其他一些方面:
尝试使用CoInitalizeEx运行程序,以COINIT_MULTITHREADED和COINIT_APARTMENTTHREADED开始
该项目是一个使用COM dll的dll
我尝试了相同的方法而没有启动新线程并且错误仍然存在
我已经制作了一个测试程序(没有线程,可执行文件),并且正常创建了对象,并正确连接。所以我猜这是与DLL本身或线程相关的事情。
答案 0 :(得分:2)
这听起来像是COM对象的IUnknown :: QueryInterface实现中的错误 - 没有设置输出指针但返回S_OK。
进程内服务器的CoCreateInstance基本上是:
在任何步骤返回NULL但S_OK应该导致崩溃,除了最后的QI调用。
答案 1 :(得分:0)
发现问题:模块属性是在静态库上定义的,这使得COM对象变得疯狂;将它移动到DLL源解决了这个问题。