Tantos
Advanced Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Возникла проблема с использованием FR 4 Prof в dll. Приложение и dll собираются с опциями "Build with run-time packages" и "Use dynamic RTL". Загрузка первой dll с FR проходит нормально. При вызове LoadLibrary последующих вылетает ошибка "A class named TfrxDMPPage already exists". Если в dll отсутствует FR, то загрузка проходит нормально. Проект собирается на С++ Builder 5 Update 1+ADO Update, Windows XP SP2. Код: void __fastcall TfrmMain::MenuBuild() { int i; TMenuItem *miReports(NULL); TComponent *Component(NULL); TLocateOptions loOptions; HINSTANCE hInst; slDll = new TStringList; loOptions<<loCaseInsensitive; if( slDll ) { SearchPlugins(slDll, asStartDir + "plugins\\" ); if( slDll->Count > 0 ) { for( i = 0; i < slDll->Count; i++) { if( fdsGrants->Locate("DLL", ExtractFileName( slDll->Strings[i] ), loOptions) ) { hInst = LoadLibrary( slDll->Strings[i].c_str() ); vDeleteForm.push_back( (LPDELETEINNERFORM)GetProcAddress( hInst, "_DeleteInnerForm") ); SetPluginMenu = (LPSETPLUGINMENU)GetProcAddress( hInst, "_SetPluginMenu"); Component = frmMain->FindComponent( fdsGrants->FBN("MOWNER")->AsString ); miReports = dynamic_cast<TMenuItem*>(Component); if( miReports && SetPluginMenu ) SetPluginMenu( Application, miReports, dmMain->fdbMain, 1 ); } //if( fdsGrants->Locate("DLL", ExtractFileName( slDll->Strings[i] ), loOptions) ) } } //if( slDll->Count > 0 ) delete slDll; } } | Ошибка вылетает на этой строчке: Код: hInst = LoadLibrary( slDll->Strings[i].c_str() ); | Судя по оф.форуму, ошибка известна и должна исправляться использование run-time пакетов, либо НЕ использованием в .exe FR. Оба условия выполнены. |