Чи можливо отримати список функцій із dll

Привіт народ! Хтось підкаже як можна отримати список експортованих функцій з DLL? Цікавить не утиліта tdump.exe, а саме програмним шляхом.

Це питання на тижні було, пошукай.

Як завжди, дурне питання - а нафіга?

Залежно від відповіді можливі різні шляхи вирішення.

У додатку планується викликати функції із dll. Ім'я бібліотеки (dll) буде задаватися довільно в опціях, також задаватиметься ім'я функції. Типи та кількість параметрів заздалегідь задані та однакові у всіх функціях, т.к. динамічні бібліотеки також свої. Так ось, хотілося б вивести список доступних функцій із вибраної бібліотеки в комбобох.

Якщо все своє, то не треба мудрувати з вийманням імен функцій із DLL. Простіше в самій DLL зробити функцію, яка повертає перелік доступних імен функцій.

Зробіть у всіх Dll функцію, яка повертатиме список функцій цієї DLL :)

Best Before 2024 (04.10.02 13:35)

Можна простіше: функція називається скрізь однаково, приймає одні й самі параметри, давати вибирати зі списку ДЛЛ-к у певній папці (так частіше плагіни роблять).

. І повертає список імен функцій, що потенційно викликаються :-)

Best Before 2024 (04.10.02 13:40) ага

ось цю байду цілком можна пристосувати під цю "потрібність": function GetDLLProcAddress(lpExpModuleName, lpProcName: PChar): Pointer; var hExporter: THandle; pOptHdr: PImageOptionalHeader; pExpDir: PImageExportDirectory; pName: PChar; pdwNamePtr, pdwEntryPoint: PDWord; pwOrdinalPtr: PWord; i, nOrdinal: DWord; begin Result := nil; hExporter := GetModuleHandle(lpExpModuleName);

if hExporter = 0 then Exit;

pOptHdr := PImageOptionalHeader(hExporter +PImageDosHeader(hExporter)._lfanew + SIZE_OF_NT_SIGNATURE + IMAGE_SIZEOF_FILE_HEADER); if (pOptHdr.NumberOfRvaAndSizes 0) then Result := Pointer(hExporter + pdwEntryPoint^); end;

Простіше використовувати COM напевно. Або пройтися по всіх функціях (назви однакові) – є, значить є. Користувачеві шкідливо знати про функції та пхати їх у ComboBox.

Ну так. А в DLL будуть функції, які чомусь викликати не треба, або ті DLL, функції яких викликати не треба. І все це на користувача покладати?

IMHO, з гармати по горобцях, однак. Такі завдання краще вирішуються лише на рівні проектування докладання.

так по барабану !) треба чи не треба)

яке питання - така відповідь

Була у мене думаючи в кожній DLL робити функцію, яка повертає список всіх доступних функцій. Але я думав, може якось без неї можна.

А щоразу дописувати ядро ​​– це, мені здається, геморой-с.

Так що "на рівні проектування програми" нічого не вийде.

Тоді в кожній DLL має бути одна функція Перетворити Лист. Типовий випадок застосування плагінів. Кожному формату листа ставиться у відповідність одна DLL (хоча в ini файлі, а краще DLL, що самореєструється)

А може, це. Для обробки скрипти пристосувати? Новий формат-новий скрипт.

>Це можна. Тільки вийде як у анекдоті Не вийде. Все виходить досить ефективно. Скрипти зберігаються в тій же базі і можуть бути виправлені в будь-який момент і якщо, наприклад, обробка проводиться не в одному місці, а в кількох це відразу знімає проблеми з версіями DLL і т.п.

У UBPFD лежить функція, яка повертає перелік експорту DLL.