【发布时间】:2011-01-01 22:44:55
【问题描述】:
我的 IM 应用程序设置如下:
- 用户界面模块 (exe)
- 插件模块(一种多态 DLL,为 UI 模块的不同协议提供抽象接口)
- 多个协议 DLL(实现各自协议的共享库 DLL,如 Jabber、ICQ 等)
现在,我被要求实现联系人列表缓存功能,这意味着执行文件 I/O。
由于无法在协议 DLL 中完成文件 I/O(它无法访问应用程序的私有文件夹) 我在用户界面模块中实现了一个派生自抽象类接口的类。
然后我将抽象接口暴露给插件模块和协议 DLL。
让这个抽象接口命名为 MFileService。
从协议 DLL 这就是我获取 MFileService 派生类实例的方式:
协议 DLL 调用插件对象上的虚函数以获取指向 MFileService 派生对象的指针
插件对象调用用户界面模块上的虚函数。
用户界面模块创建一个 MFileService 派生类的实例并将其返回给调用者(插件对象)
插件对象又将其返回给协议 DLL。
问题是我的应用程序在第 1 步对 KERN-EXEC 3 进行虚函数调用时崩溃了 插件对象。
提示:
从协议 DLL 对插件对象的所有虚函数调用都成功,除了我最近的那个 已添加。
我新添加到插件和用户界面模块的虚函数返回一个指向MFileService的指针。
我没有导出任何虚函数,因为它们都是纯虚函数。
【问题讨论】:
标签: c++ dll function symbian virtual