我的IM应用程序设置如下:
现在,我被要求实施联系人列表缓存功能,这意味着要进行文件I / O.
由于文件I / O无法在协议DLL中完成(它无法访问应用程序私有文件夹) 我实现了一个派生自用户界面模块中的抽象类接口的类。
然后我将抽象接口暴露给插件模块和协议DLL。
让抽象接口命名为MFileService。
从协议DLL中我得到了一个MFileService派生类的实例:
协议DLL调用插件对象上的虚函数以获取指向MFileService派生对象的指针
插件对象调用用户界面模块上的虚函数。
用户界面模块创建MFileService dervied类的实例并将其返回给调用者(插件对象)
插件对象inturn将其返回到协议DLL。
问题是我的应用程序在执行虚拟函数调用时在第1步崩溃了KERN-EXEC 3 插件对象。
HINTS:
从协议DLL对插件对象进行的所有虚函数调用都是成功的,除了我最近的调用 加入。
我新添加到插件和用户界面模块的虚拟函数返回指向MFileService的指针。
我没有导出任何虚拟功能,因为它们都是纯虚拟的。
答案 0 :(得分:1)
KERN-EXEC 3通常表示访问冲突。这可能意味着MFileService未在插件DLL中正确初始化。
没有代码,我不能给你更多细节。
答案 1 :(得分:1)
由于文件I / O无法在协议DLL中完成(它无法访问应用程序私有文件夹)
事实并非如此。 DLL代码在进程(exe)上下文中运行,并且基本上可以执行主exe的任何操作,包括访问其私有目录数据笼。