Определить путь(location) dll файла.
От: Igor Sukhov  
Дата: 06.01.09 00:11
Оценка:
Система устроена таким образом что часть ф-ти находится в .dll файле.

Подскажите наиболее "платформонезависимую" ф-ю чтобы определить положение этого файла на диске в runtime.
(в моем случае .exe файл и .dll файл будут в разных директориях).

Компилятор — VS2008.





06.01.09 10:50: Перенесено модератором из 'C/C++. Прикладные вопросы' — Кодт
* thriving in a production environment *
Re: Определить путь(location) dll файла.
От: cencio Украина http://ua-coder.blogspot.com
Дата: 06.01.09 01:16
Оценка:
Здравствуйте, Igor Sukhov, Вы писали:

IS>Система устроена таким образом что часть ф-ти находится в .dll файле.


IS>Подскажите наиболее "платформонезависимую" ф-ю чтобы определить положение этого файла на диске в runtime.

IS>(в моем случае .exe файл и .dll файл будут в разных директориях).

IS>Компилятор — VS2008.




в каком смысле "платформонезависимую" ? если это екзе+длл+VS2008, то и работать будет под виндовсом.
и способы тут сильно платформо зависимые и привязаные к винде. Если особо не задумываться, в и предварительные условия добавить что ф-ция знает название нужной длл и требуется найти только путь к ней, в голову приходить использовать CreateToolhelp32Snapshot для создания снапшота текущего процесса и в нем найти нужную длл.

может проще будет при инсталяции определять место,куда должна попадать длл явно, ставить свою вместе с екзешкой, прописывать пути(например в реестре), использовать манифест для загрузки нужной весии длл? вообщем любым способом попробовать избежать длл хела.
Re[2]: Определить путь(location) dll файла.
От: Igor Sukhov  
Дата: 06.01.09 02:06
Оценка:
Здравствуйте, cencio, Вы писали:

C>Здравствуйте, Igor Sukhov, Вы писали:


IS>>Система устроена таким образом что часть ф-ти находится в .dll файле.


IS>>Подскажите наиболее "платформонезависимую" ф-ю чтобы определить положение этого файла на диске в runtime.

IS>>(в моем случае .exe файл и .dll файл будут в разных директориях).

IS>>Компилятор — VS2008.


C>в каком смысле "платформонезависимую" ? если это екзе+длл+VS2008, то и работать будет под виндовсом.

платформонезависимость в том смысле что я бы лучшше использовал ф-ю к-я называкется __getImagePath чем
AfxGetDll32Path.

C>и способы тут сильно платформо зависимые и привязаные к винде. Если особо не задумываться, в и предварительные условия добавить что ф-ция знает название нужной длл и требуется найти только путь к ней, в голову приходить использовать CreateToolhelp32Snapshot для создания снапшота текущего процесса и в нем найти нужную длл.


C>может проще будет при инсталяции определять место,куда должна попадать длл явно, ставить свою вместе с екзешкой, прописывать пути(например в реестре), использовать манифест для загрузки нужной весии длл? вообщем любым способом попробовать избежать длл хела.

проще не будет, т.к. во 1-ых инсталятора как такового нет и не будет (на это много причин — нет у пользователя прав, нет времени делать исталятор, пользователь не уммет пользоваться инсталятором) а вот 2-ых — это на самом деле не dll а файл с другим расширением к-е загружается как плагин в другое 3rd party приложение. в общем сложно.
* thriving in a production environment *
Re: Определить путь(location) dll файла.
От: Draqon  
Дата: 06.01.09 06:59
Оценка: 10 (1)
Для XP/2003:

CString getThisModulePath()
    {
        CString path;

        HMODULE thisModule = 0;
        VERIFY(GetModuleHandleEx(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS, (LPCTSTR)&__FUNCTION__, &thisModule));
        LPTSTR pathBuf = path.GetBuffer(MAX_PATH);
        VERIFY(GetModuleFileName(thisModule, pathBuf, MAX_PATH));
        VERIFY(PathRemoveFileSpec(pathBuf));
        path.ReleaseBuffer();

        return path;
    }


CString, есс-но, заменить по вкусу
Re: Определить путь(location) dll файла.
От: Draqon  
Дата: 06.01.09 07:23
Оценка: 15 (1)
А вот ещё интересное по теме:
Раз (для VS7 и старше) и два (для всего), оба основываются на том, что "Handle to the DLL module is the base address of the DLL."
Re[3]: Определить путь(location) dll файла.
От: Odi$$ey Россия http://malgarr.blogspot.com/
Дата: 06.01.09 07:29
Оценка: 5 (1)
Здравствуйте, Igor Sukhov, Вы писали:

IS>платформонезависимость в том смысле что я бы лучшше использовал ф-ю к-я называкется __getImagePath чем

IS>AfxGetDll32Path.

GetModuleFileName() + HINSTANCE Dll
Автор: Odi$$ey
Дата: 28.06.04
... << RSDN@Home 1.2.0 alpha 4 rev. 1111>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.