我有一个加载子dll的ActiveX dll(NPAPI插件)。我的子插件创建了多个线程,他们需要回传到网页。在我的ActiveX(父dll)中,我有连接点来触发javascript事件以提供更新。我遇到的问题是我不知道孩子如何调用父DLL。
我尝试过: 1:将函数指针传递给不在类中的函数的子dll,并使用全局变量作为指向ActiveX类的指针(this),但在使用E_UNEXPECTED调用时连接点失败
2:将子dll传递给我的类函数指针,并得到相同的结果。
我还在同时学习C ++和COM,对不起我的无知。谢谢。
答案 0 :(得分:0)
COM有办法设置,以便您可以从其他线程调用COM方法,但最简单的方法是将所有调用回到主线程上的activex控件。一种方法是创建一个消息窗口并向其发布一条Windows消息,其中LPARAM是一个指向包含进行调用所需参数的数据结构的指针;你创建结构并填写它,然后发布消息并在你的WINPROC打电话后释放内存。
FireBreath使用这种方法,效果很好。说到这个,您是否考虑过将您的NPAPI插件作为FireBreath插件实现,以便它在activex和npapi中都有效?
以下是一些可能有用的代码示例:
希望有所帮助