Конференція VBStreets - Перегляд теми - Визначення імені dll-файлу

Весь смак програмування!

  • Список форумів Платформи Windows-програмування
  • Змінити розмір шрифту
  • FAQ
  • Вхід

Визначення імені dll-файлу

Визначення імені dll-файлу

Як без .NET із dll дізнатися її ім'я файлу? Саме ім'я файлу не assembly name.

Т. е. потрібен нативний аналог цього: Код: Виділити все System::Reflection::Assembly::GetExecutingAssembly()->Location

Ура! Вийшла нова версія Unreal Commаnder'а!

Re: Визначення імені dll-файлу

Лол. Windows знати не знає, що таке assembly, єдине, що вона знає, це module image.

Отримати ім'я файлу легко - GetModuleName.

Ура! Вийшла нова версія Unreal Commаnder'а!

Re: Визначення імені dll-файлу

DLL-шке при завантаженні передається її hModule і DLL-шка повинна зберегти в себе це значення, якщо їй надалі буде потрібно.

Якщо це пишеться на С/С++, то треба це робити вручну. Якщо на VB - все вже зроблено, збережене значення можна отримати через App.hInstance. У делфях не знаю як.

Сі++. Зберіг, тепер усе працює. Дякую

Ура! Вийшла нова версія Unreal Commаnder'а!

Re: Визначення імені dll-файлу

Ура! Вийшла нова версія Unreal Commаnder'а!

Re: Визначення імені dll-файлу

Ура! Вийшла нова версія Unreal Commаnder'а!

Re: Визначення імені dll-файлу

Ура! Вийшла нова версія Unreal Commаnder'а!

Re: Визначення імені dll-файлу

Поняття складання - таке ж дотнетспецифическое, як поняття EpiProject у VB6. Windows знати не хоче і не оперує таким поняттями: ні поняттям складання, ні поняттям EpiPrject.

Windows оперує поняттям "executable image" або "module". Тепер ти запитуєш: є якась функція і є якийсь модуль. Потрібно, щоб ця функція отримала ім'я цього модуля. Вирішити це завдання ніяк не можна, поки ти з усією суворістю не скажеш, який зв'язок між цією функцією і цим модулем є. Адже функцій може бути сто тисяч і модулів може бути сотня. Ім'я якого зі ста модулів має повертати кожна зі ста тисяч функцій. Очевидно, що не будь-якого, а якогось певного специфікою завдання.

Ось ти маєш з математичною строгістю визначити взаємозв'язок. Я знаю, який приблизно взаємозв'язок ти хочеш. Але важливо, щоби саме ти висловив. Бо одразу побачиш проблеми, які зараз не бачиш. Концептуальні.

До того ж, передавши 0, я отримую exe'шник. Не бачу концептуальних проблем, що заважає отримати dll'ку приблизно так само.

Ура! Вийшла нова версія Unreal Commаnder'а!

Re: Визначення імені dll-файлу

Ура! Вийшла нова версія Unreal Commаnder'а!

Re: Визначення імені dll-файлу

Між функцією, що викликається, і модулем - ніякий.[/quote]

Йдеться про твою функцію чи про гіпотетичну системну? Системна, наскільки я пам'ятаю, така теж була, щоправда, з PSAPI або ImageHelp (не пам'ятаю, звідки і як називалася).

Ось бачиш, тепер уже все стало ясно (не на рівні припущень, а на рівні викладеного факту).

Якщо ти хочеш написати саму функцію, яка визначає ім'я модуля, якому належить сторона, що викликає, то ти сам уже сказав:

Якщо тебе цікавить, чому такої функції немає. То вона по-перше наскільки я пам'ятаю їсти. Але краще б її не було, тому що таке рішення не відповідає принципу лінощів (не потрібно обчислювати/отримувати те, що коли-раніше вже було обчислено або відомо), а по-друге — це принципово порочна практика. Програма повинна завжди знати, що точно вона хоче отримати, а не сподіватися на те, що вийде.

Якщо якийсь код хоче отримати ім'я модуля, він повинен знати хендл модуля. І хендл модуля він повинен отримати від системи тоді, коли вона завантажує модуль. Інакше, можливо код взагалі живе НЕ в модулі. Для ситуації, коли код є, а модуля немає, система має бути спроектована так, що в такій ситуації й отримати ім'я/хендл модуля не можна. Система спроектована так. Блискуче рішення.