Advertisement
HwapX

DllStdCall

Apr 7th, 2014
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 1.76 KB | None | 0 0
  1. function DllStdCall(DllName: string; FuncName: string; Params: array of const): Integer;
  2. var
  3.   DllHandle: Cardinal;
  4.   FuncAddr : Pointer;
  5.   Param    : TVarRec;
  6.   I        : Integer;
  7. begin
  8.   DllHandle := LoadLibrary(PChar(DllName));
  9.   if DllHandle = 0 then
  10.     raise Exception.Create('Can''t load dll ' + DllName);
  11.  
  12.   FuncAddr := GetProcAddress(DllHandle, PChar(FuncName));
  13.  
  14.   if FuncAddr = nil then
  15.     raise Exception.Create(FuncName + ' not found');
  16.  
  17.   for I := High(Params) downto 0 do
  18.   begin
  19.     Param := Params[I];
  20.     case Params[I].VType of
  21.       vtInteger:
  22.       asm
  23.         push Param.VInteger;
  24.       end;
  25.       vtBoolean:
  26.       asm
  27.         push Integer(Param.VBoolean);
  28.       end;
  29.       vtChar:
  30.       asm
  31.         push Integer(Param.VChar);
  32.       end;
  33.       vtExtended:
  34.       asm
  35.         push Param.VExtended;
  36.       end;
  37.       vtString:
  38.       asm
  39.         push Param.VString;
  40.       end;
  41.       vtPChar:
  42.       asm
  43.         push Param.VPChar;
  44.       end;
  45.       vtObject:
  46.       asm
  47.         push Param.VObject;
  48.       end;
  49.       vtClass:
  50.       asm
  51.         push Param.VClass;
  52.       end;
  53.       vtAnsiString:
  54.       asm
  55.         push Param.VAnsiString;
  56.       end;
  57.       vtUnicodeString:
  58.       asm
  59.         push Param.VUnicodeString;
  60.       end;
  61.       vtCurrency:
  62.       asm
  63.         push Param.VCurrency;
  64.       end;
  65.       vtInt64:
  66.       asm
  67.         push Param.VInt64;
  68.       end;
  69.       vtPointer:
  70.       asm
  71.         push Param.VPointer;
  72.       end;
  73.       vtWideChar:
  74.       asm
  75.         push Param.VWideChar;
  76.       end;
  77.       vtPWideChar:
  78.       asm
  79.         push Param.VPWideChar;
  80.       end;
  81.       else
  82.         raise Exception.Create('Unsuported Type');
  83.     end;
  84.   end;
  85.   asm
  86.     call FuncAddr;
  87.     mov Result, EAX;
  88.   end;
  89. end;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement