Показать сообщение отдельно
  #5  
Старый 22.10.2012, 21:09
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Цитата:
представь, есть форма, на ней куча едитов, в первый выбираешь имя длл во второй имя функции в ней, в третьем выбираешь типы параметров и значения, наример
Код:
var hModule: DWORD;
     proc: pointer;
     a: DWORD;
     Params: array of DWORD;
...
hModule := LoadLibrary(Edit1.Text);
proc := GetProcAddress(hModule, Edit2.Text);
if (proc <> 0) then
begin
   asm
     mov esi, Params
     mov ecx, count
     lea esp, [esp - ecx * 4]
     mov edi, esp
     cld
     rep movsd
     mov eax, proc
     call eax
 end;
end
else
  MessageBoxA(0, 'Печальная история...', 'Ошибка', 0);
Как-то так в случае, если параметры можно превратить в массив двордов Params (абсолютное большинство случаев). Если нельзя (суммарное кол-во байт не делится на 4) - то придется подобным образом с вордами (к счастью до байтов скатываться не придется - push для байта не существует, так что суммарный размер параметров всегда делится на 2 как минимум).
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием