Задача такова: нужна функция, на входе которой массив из переменных, а на выходе неизвестный резальт работы внешней функции. Никаких привязаностей, все максимально мобильно и независимо.
Например:
у меня есть длл, имя которой MyDLL.dll. Во время исполнения проги, мне нужна исполнить функцию SomeFunc(param1:integer;param2:string):boolean;
вопрос: как..?
просто вся фича в том, что заранее я не могу знать ни имени длл, ни имени, параметров и резальта функции...
...как я пытался это сделать...
1) LoadLibrary - апи функция, дает мене дескриптор проекции моей длл
2) GetProcAddress - тож апи, возвращает точку входа в функцию
3) ...тут то и запарка... нужен АСМ. - запихнуть то переменные я запихнул, но получить резальт типа VARIANT, не могу, так как размер еах 32, а варианта - 16.. че делать тута не знаю
function TForm1.Execute(params: array of const; libname,
funcname: string): variant;
function CallRemoteFunction(p:pointer;int1,int2:integer):variant;
var
v:variant;
begin
asm
push int2
push int1
call p;
mov [v],DWORD PTR eax // ---- ошибка операнд сайз
// мистматч
end;
end;
var
l:Cardinal;
p:pointer;
begin
l:=LoadLibrary(PChar(libname));
p:=GetProcAddress(l,PChar(funcname));
if p=nil then begin FreeLibrary(l); exit; end;
result:=CallRemoteFunction(p,2,1);
FreeLibrary(l);
end;
неа.. не выходит...
короче что в еах.. точно не известно - на крайняк тама должно быть 16 байт - размер типа VARIANT.
моя задача написать функцию, на входе которой параметры, имя библиотеки и функции, а на выходе результат удаленной фунции. и не должно не зависить не от типа параметров, ни от резальта библиотечной функции. как это сделать..?
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах