| | 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
 | 
 |