Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- function DllStdCall(DllName: string; FuncName: string; Params: array of const): Integer;
- var
- DllHandle: Cardinal;
- FuncAddr : Pointer;
- Param : TVarRec;
- I : Integer;
- begin
- DllHandle := LoadLibrary(PChar(DllName));
- if DllHandle = 0 then
- raise Exception.Create('Can''t load dll ' + DllName);
- FuncAddr := GetProcAddress(DllHandle, PChar(FuncName));
- if FuncAddr = nil then
- raise Exception.Create(FuncName + ' not found');
- for I := High(Params) downto 0 do
- begin
- Param := Params[I];
- case Params[I].VType of
- vtInteger:
- asm
- push Param.VInteger;
- end;
- vtBoolean:
- asm
- push Integer(Param.VBoolean);
- end;
- vtChar:
- asm
- push Integer(Param.VChar);
- end;
- vtExtended:
- asm
- push Param.VExtended;
- end;
- vtString:
- asm
- push Param.VString;
- end;
- vtPChar:
- asm
- push Param.VPChar;
- end;
- vtObject:
- asm
- push Param.VObject;
- end;
- vtClass:
- asm
- push Param.VClass;
- end;
- vtAnsiString:
- asm
- push Param.VAnsiString;
- end;
- vtUnicodeString:
- asm
- push Param.VUnicodeString;
- end;
- vtCurrency:
- asm
- push Param.VCurrency;
- end;
- vtInt64:
- asm
- push Param.VInt64;
- end;
- vtPointer:
- asm
- push Param.VPointer;
- end;
- vtWideChar:
- asm
- push Param.VWideChar;
- end;
- vtPWideChar:
- asm
- push Param.VPWideChar;
- end;
- else
- raise Exception.Create('Unsuported Type');
- end;
- end;
- asm
- call FuncAddr;
- mov Result, EAX;
- end;
- end;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement