Profrager
Advanced Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Bulat_Ziganshin Код: FARPROC LoadFromDLL (char *funcname, int only_facompress_mt) { #ifdef FREEARC_WIN // Non-Windows platforms aren't yet supported static bool loaded = FALSE; static HMODULE dll = NULL, dll2 = NULL; if (!loaded) { loaded = TRUE; // Get program's executable filename wchar_t path[MY_FILENAME_MAX]; GetModuleFileNameW (NULL, path, MY_FILENAME_MAX); ... | А можно специально для unarc.dll в функции GetModuleFileNameW вместо Null подставлять HInstance из чего-нить типа такого: Код: HINSTANCE hInst; ... BOOL WINAPI DllMain(HINSTANCE hinstDLL,DWORD fdwReason,LPVOID lpvReserved) { if (fdwReason == DLL_PROCESS_ATTACH) hInst = hinstDll; } ... use hInst in program ... | а то получается, что InnoSetup сначала распаковывает в некую свою папку темп модуль setup.tmp и запускает его как новый процесс. Соответственно из него и происходят все действия и подцепления dll'ок, и функция GetModuleFileNameW (NULL, path, MY_FILENAME_MAX) возвращает путь именно к нему, что очень не удобно. Потому как приходится специально копировать facompress.dll рядом с этим setup.tmp, а потом вручную удалять. Было бы на много удобнее, чтобы путь определялся как путь текущей dll, а не прилинковавшего её процесса. | Всего записей: 888 | Зарегистр. 22-05-2010 | Отправлено: 22:15 25-08-2010 | Исправлено: Profrager, 22:36 25-08-2010 |
|