это мой первый пост в stackoverflow, и я начинаю с проблемы.
Я пишу приложение графического интерфейса с Qt в C ++.
На данный момент я застрял на загрузке и сохранении DLL, которые были переданы мне.
Для загрузки и сохранения я решил установить функции для задач загрузки и сохранения. Но главная проблема заключается в загрузке различных файлов DLL.
У меня есть следующий код для загрузки и сохранения, но я получаю ошибки, когда я переключаюсь с загрузки на сохранение. я знаю, что это как-то связано с функцией «FreeLibrary ()». Но в случае выполнения FreeLibrary (hDLLimp) я не могу повторить загрузку моего «implib.dll». Возвращенный hDLLimp равен 0.
Если я закомментирую FreeLibrary, функция загрузки может быть выполнена повторно несколько раз. Но функция сохранения не работает. hDLLexp становится «0» и дескриптор исчез.
// Load function
HINSTANCE hDLLimp = 0;
GETCOUNTS fncgetcounts;
GETITEM fncgetitem;
IMPEXPINTERFACE fncimportinterface;
TProcLib *proclib;
TNativeSurface nativesurface;
char filepath[_MAX_PATH];
hDLLimp = LoadLibrary(TEXT("implib.dll"));
DWORD Error = GetLastError();
if( hDLLimp == 0 )
{
QMessageBox *msgBox = new QMessageBox;
msgBox->setText("implib.dll konnte nicht geladen werden");
msgBox->exec();
return;
}
fncgetcounts = (GETCOUNTS) GetProcAddress(hDLLimp, "GetCounts");
fncgetitem = (GETITEM) GetProcAddress(hDLLimp, "GetItem");
fncimportinterface = (IMPEXPINTERFACE) GetProcAddress(hDLLimp, "ImportInterface");
for (long i=0; i<fncgetcounts()-1; i++) {
if ((proclib = fncgetitem(i))==NULL) break;
if (strcmp(proclib->ResName, "SDFIMPORT")==0) {
strcpy(filepath, "test.sdf");
fncimportinterface(filepath, _MAX_PATH, &(proclib->PrgId), 2, &nativesurface, 0, 0, NULL, NULL, 1);
break;
}
}
//FreeLibrary(hDLLimp);
//Export/Save function
HINSTANCE hDLLexp = 0;
GETCOUNTS fncgetcounts;
GETITEM fncgetitem;
IMPEXPINTERFACE fncexportinterface;
TProcLib *proclib;
TNativeSurface nativesurface;
char filepath[_MAX_PATH];
hDLLexp = LoadLibrary(TEXT("explib.dll"));
if( hDLLexp == 0 )
{
QMessageBox *msgBox = new QMessageBox;
msgBox->setText("explib.dll konnte nicht geladen werden");
msgBox->exec();
return;
}
fncgetcounts = (GETCOUNTS) GetProcAddress(hDLLexp, "GetCounts");
fncgetitem = (GETITEM) GetProcAddress(hDLLexp, "GetItem");
fncexportinterface = (IMPEXPINTERFACE) GetProcAddress(hDLLexp, "ExportInterface");
for (long i=0; i<fncgetcounts()-1; i++) {
if ((proclib = fncgetitem(i))==NULL) break;
if (strcmp(proclib->ResName, "SDFEXPORT")==0) {
strcpy(filepath, "test.sdf");
fncexportinterface(filepath, _MAX_PATH, &(proclib->PrgId), 2, &nativesurface, 0, 0, NULL, NULL, 1);
break;
}
}
//FreeLibrary(hDLLexp);
Задача ещё не решена.
Других решений пока нет …