Възможно ли е да получите списък с функции от dll
Здравейте, хора! Някой може ли да ми каже как да получа списъка с експортирани функции от DLL? Не се интересувам от помощната програма tdump.exe, а от програмния начин.
Този въпрос беше през седмицата, вижте.
Както обикновено, глупав въпрос - но за какво?
В зависимост от отговора са възможни различни решения.
Приложението планира да извиква функции от dll. Името на библиотеката (dll) ще бъде зададено произволно в опциите и името на функцията също ще бъде зададено. Типовете и броя на параметрите са предварително дефинирани и са еднакви във всички функции, т.к динамичните библиотеки също са техни собствени. И така, бих искал да покажа списък с налични функции от избраната библиотека в разгъващ се списък.
Ако всичко е ваше собствено, тогава не е нужно да сте умни, като изваждате имената на функциите от DLL. По-лесно е в самата DLL да се направи функция, която връща списък с налични имена на функции.
Направете функция във всички DLL, която ще върне списък с функции на тази DLL :)
Най-добър преди 2024 (04.10.02 13:35)
Може да бъде по-просто: функцията се нарича еднакво навсякъде, приема едни и същи параметри, позволява ви да избирате от списъка с DLL файлове в определена папка (плъгините правят това по-често).
. И връща списък с имена на потенциално извикани функции :-)
Най-добър преди 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; започнете Резултат := нула; hExporter := GetModuleHandle(lpExpModuleName);
ако hExporter = 0 тогава Изход;
pOptHdr := PImageOptionalHeader(hExporter +PImageDosHeader(hExporter)._lfanew + SIZE_OF_NT_SIGNATURE + IMAGE_SIZEOF_FILE_HEADER); if (pOptHdr.NumberOfRvaAndSizes 0) then Result := Pointer(hExporter + pdwEntryPoint^); край;
Вероятно е по-лесно да се използва COM. Или преминете през всички функции (имената са същите) - да, тогава има. Вредно е потребителят да знае за функциите и да ги набутва в ComboBox.
Е да. И в DLL ще има функции, които по някаква причина не трябва да се извикват, или тези DLL, функции, от които не е необходимо да се извикват. И всичко това на потребителя да зададете?
IMHO, от оръдие до врабчета обаче. Такива задачи се решават най-добре на ниво проектиране на приложение.
да на барабана!) необходимо е или не е необходимо)
какъв е въпросът, какъв е отговорът
Имах идея във всяка dll да направя функция, която връща списък с всички налични функции. Но си помислих, че може би някак си без него.
И всяко добавяне на ядро е, струва ми се, хемороиди.
Така че "на ниво дизайн на приложението" няма да работи.
Тогава всеки DLL трябва да има една функция ConvertWriter. Типично използване на добавки. На всеки буквен формат е присвоен един DLL (поне в ini файла, а по-скоро саморегистриращ се DLL)
Или може би това. Да адаптирате скриптове за обработка? Нов формат - нов скрипт.
>Възможно е. Само че ще стане като във виц Няма да се получи. Просто всичко работи доста ефективно. Скриптовете се съхраняват в една и съща база данни и могат да бъдат коригирани по всяко време, а ако например обработката се извършва не на едно място, а на няколко, това веднага премахва проблемите с dll версиите и т.н.
UBPFD има функция, която връща списък с DLL експорти.