处理COM调度事件会导致VB6编译代码崩溃

时间:2014-10-15 16:34:26

标签: events com vb6

我开发了一个C ++ ATL项目,其中包含一个简单的COM对象,可以在VB6中使用。我选择了允许合并代理/存根的选项。该项目使用单线程单元模型,双接口,并支持连接点。

我已经为接口和dispinterface添加了方法,并实现了' fire'通过运行实施连接点向导(也称为添加连接点)的方法。 我在VB6中创建了测试应用程序来使用COM对象。一个应用程序是命名管道服务器,另一个是命名管道客户端。

在这些应用程序中,我添加了对象的引用,并在窗体上全局变暗。在服务器中,我另外声明了它'WithEvents'。
VB6看到了' WithEvents'对象并允许我添加我的事件处理程序代码。

当我通过按播放(通过VB6.exe)在VB6中运行应用程序时,我的服务器启动并且客户端连接。我的服务器触发一个事件,vb6事件处理程序代码处理它。这很棒,正是我想要的。

当我构建应用程序的VB6可执行文件并运行它们时,相同的事件序列会使服务器崩溃。在调试中,崩溃的代码是' Fire'的IDispatch :: Invoke方法。码。我的服务器一旦启动,就在一个单独的线程中运行以接受管道连接。在这个单独的线程中发布了火灾事件。

我可能违反了STA模型(我不知道),但我已按照我的编程手册中有关将事件用于长时间运行任务的说明进行操作。代码示例总是显示生成一个线程,并从该线程调用fire方法。任何见解将不胜感激。

1 个答案:

答案 0 :(得分:0)

提到使用IGlobalInterfaceTable接口来编组指向另一个公寓的接口指针正好描述了我的用例。我将尝试这种方法并验证答案。