-
Здравствуйте. Хочется узнать, есть ли способ получить список всех export'нутых функций и процедур из DLL и списком параметров к ним с указанием типа параметра + тип результата функции. Например:
type
TDLLFunctionParam = record
Name: String;
pType: String;
end;
TDLLFunctionParams = array of TDLLFunctionParam;
TDLLFunction = record
Name: String;
Params: TDLLFunctionParams;
Result: TDLLFunctionParam;
end;
TDLLFunctions = array of TDLLFunction;
var
h: HWND;
fs: TDLLFunctions;
begin
h := LoadLibrary('C:\mylib.dll');
fs := getLibraryFunctions(h);
end;
и затем вызвать любую функцию и получить результат:
var
h: HWND;
fs: TDLLFunctions;
f: TDLLFunction;
s: String;
begin
h := LoadLibrary('C:\mylib.dll');
fs := getLibraryFunctions(h);
f := fs[0];
s := callLibraryFunction(h, f, ['a', '1', '1.2']);
end;
то есть я передаю handle библиотеки, функцию и массив строковых параметров, получаю строковой результат в SИли нужно заранее знать имена всех функций и четко предопределять параметры? Вызывая GetProcAddress(Module: THandle; ProcName: PChar);
-
> Или нужно заранее знать имена всех функций и четко предопределять > параметры?
да
-
А если я заведомо знаю имена функций и кол-во параметров, функцию braryFunction(h, f, ['a', '1', '1.2']); можно будет использовать?.. Или я пролетел вообще?)
-
> Vidog © (30.11.10 20:34) [2]
> А если я заведомо знаю имена функций и кол-во параметров, > функцию braryFunction(h, f, ['a', '1', '1.2']); можно будет > использовать?.. Или я пролетел вообще?)
А с какого вдруг пуркуа длл?
See also: varargs directive.
-- Regards, LVT.
-
> А если я заведомо знаю имена функций и кол-во параметров, > функцию braryFunction(h, f, ['a', '1', '1.2']); можно будет > использовать?.. Или я пролетел вообще?)
можно
-
2 Игорь Шевченко >>можно
подскажите, пожалуйста.
-
> Vidog © (01.12.10 22:02) [5] > подскажите, пожалуйста.
Готов подсказать, если пользование длл обоснованно.
-- Regards, LVT.
-
> подскажите, пожалуйста.
что подсказать ?
-
> что подсказать ?
каким образом можно реализовать вот это: s := callLibraryFunction(h, f, ['a', '1', '1.2']); из части кода. желательно на WinAPI. Куда копать, что почитать :)
-
> из части кода. желательно на WinAPI. Куда копать, что почитать > :) http://www.delphi-jedi.org раздел API Tranlsation например почитать
-
>>dlopen я в ту сторону копаю?)
-
-
function test(a, b, c: String): String;
begin
Result := '[' + a + ']' + '[' + b + ']' + '[' + c + ']';
end;
exports test;
Вот такая в DLL тестовая функция с 3мя параметрами.
var
modl: TModuleHandle;
P: Pointer;
S: String;
begin
LoadModule(modl, 'Project1.dll');
P := GetModuleSymbol(modl, 'test');
S := 'qwe-qwe-qwe';
WriteModuleData(modl, 'test', S, sizeOf(S));
end;
насколько я понял, передать данные можно через WriteModuleData, а прочитать потом через ReadModuleData. Так вот.. Каким образом передать 3 параметра? Выполнить функцию 3 раза? Каждый раз записывая параметр. Или я вообще не туда полез...
-
> LoadModule
> WriteModuleData
Это вообще из какой оперы ?
-
> Это вообще из какой оперы ?
moduleloader.pas
=/ что-то у меня ничего не получается...
-
> Vidog © (03.12.10 09:48) [14]
Что ты испод нас хочешь?
-- Regards, LVT.
-
> Vidog © (03.12.10 09:48) [14] > > > > Это вообще из какой оперы ? > > > moduleloader.pas >
Какой еще нахрен "moduleloader.pas" ? Нет такого юнита в составе штатных дельфийских юнитов. По кр.мере - в Д7.
-
> Сергей М. © (03.12.10 20:49) [16]
> Какой еще нахрен "moduleloader.pas" ?
М.б. by JEDI?
Хотя, конечно, проще отрубить ему голову.
-- Regards, LVT.
-
> Какой еще нахрен "moduleloader.pas" ?
из JEDI библиотеки..
Мужики, ну спасайте) Дайте хоть ссылочку на пример или какие использовать модули / функции.
-
> Vidog © (05.12.10 22:23) [18]
Посмотрел.
Этот самый moduleoader не имеет никакого отношения к тому что тебе нужно.
А то что тебе нужно, т.е.
> спискоr параметров к ним с указанием типа параметра + тип результата функции
гарантированно на 100% в ран-тайм можно получить только в отдельных частных случаях. В прочих случаях, не относящихся к этим самым "частным", задача в ран-тайм практически не решаема.
|