Я хочу динамически загружать клиентскую dll в мое приложение на C++ Windows. Поэтому я использую ACE_DLL. Я хочу создать объект класса в dll клиента в своем приложении. Итак, я написал класс обертки. Одна из его функций-членов создает объект ACE_DLL. Затем, используя этот объект, я загружаю dll клиента. Затем я вызываю функцию символа через объект ACE_DLL и передаю измененное имя конструктора класса в dll клиента. Затем я вызываю указатель функции (_entry), который содержит адрес конструктора, но на этот раз я получаю ошибку как «Необработанное исключение (нарушение доступа)»Динамическая загрузка клиентской библиотеки C++ с использованием ACE_DLL, дающей ошибку как необработанное исключение
Пожалуйста, дайте мне знать, если мой подход верен. Ниже приведена последовательность вызовов в моем приложении.
ACE_DLL* _pDll;
typedef Test* (*TestFP)();
TestFP _entry;
_pDll = new ACE_DLL();
_pDll->open("dllname_to_be_opend");
std::string sSymbol = "Test";
// искаженное название Test конструктор класса в DLL клиента
_entry = (TestFP) _pDll->symbol(sSymbol.c_str());
// Необработанное исключение при 0x00362b2f в Testdll.exe: 0xC0000005: нарушение прав доступа пишущего местонахождения 0x00362b0c.
Спасибо, Прасад
Нет. Приложение My Test не работает. Предоставление ошибки как Необработанное исключение. Я смущен, если, я могу получить адрес конструктора класса Test в dll клиента с помощью метода symbol(), а затем вызвать этот указатель функции для создания объекта класса Test. –
Если тестовая программа также не работает, это, скорее всего, проблема с сборкой. Я рекомендую сравнить настройку сборки с таблицей сборки (http://www.dre.vanderbilt.edu/scoreboard/), которая наиболее точно соответствует вашей среде и видит, что по-другому. Как только вы сможете запустить DLL_Test, вернитесь и повторите попытку своей программы. –