Настройки моего приложения для обмена мгновенными сообщениями указаны ниже:
- Модуль интерфейса пользователя (exe)
- Модуль плагина (полиморфная DLL, предоставляющая абстрактный интерфейс для различных протоколов модуля UI)
- Несколько DLL-библиотек протоколов (DLL-библиотеки общих библиотек, которые реализуют соответствующие протоколы, такие как Jabber, ICQ и т. Д.)
Теперь меня попросили реализовать функцию кэширования списков контактов, а это означало выполнение операций ввода-вывода в файле.
Поскольку файловый ввод / вывод не может быть выполнен в протокольных DLL (он не может получить доступ к личной папке приложений)
Я реализовал класс, производный от интерфейса абстрактного класса, в модуле интерфейса пользователя.
Затем я открыл абстрактный интерфейс для модуля Plugin и протокольных DLL.
Пусть этот абстрактный интерфейс будет называться MFileService.
Из протокола DLL я получаю экземпляр производного класса MFileService:
Протокол DLL вызывает виртуальную функцию для объекта плагина, чтобы получить указатель на производный объект MFileService
Плагин-объект вызывает виртуальную функцию в модуле интерфейса пользователя.
Модуль пользовательского интерфейса создает экземпляр класса Dervied MFileService и возвращает его вызывающей стороне (объект плагина)
Плагин объекта inturn возвращает его в DLL-библиотеку протокола.
Проблема в том, что мое приложение аварийно завершает работу с KERN-EXEC 3 на шаге 1, когда он вызывает виртуальную функцию
объект плагина.
НАМЕКАЕТ:
Все вызовы виртуальных функций, выполняемые для объекта плагина из протокола DLL, успешно выполняются, за исключением недавно выполненного мной.
добавлено.
Виртуальная функция, которую я недавно добавил в модуль плагина и интерфейса пользователя, возвращает указатель на MFileService.
Я не экспортировал ни одной из виртуальных функций, поскольку все они чисто виртуальные.