Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- function DllStdCall(DllName: string; FuncName: string; Params: array of Variant; ForceAnsi: Boolean): Integer;
- var
- DllHandle: Cardinal;
- FuncAddr : Pointer;
- I : Integer;
- TempDoub : Integer;
- TempInt64: Int64;
- AnsiStr : AnsiString;
- 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
- case VarType(Params[I]) of
- varInteger, varSmallint, varShortInt, varLongWord, varWord, varByte, varError, varInt64:
- asm
- push Integer(Params[I]);
- end;
- varBoolean:
- asm
- push Integer(Boolean(Params[I]));
- end;
- varDouble:
- begin
- TempDoub := Params[I];
- asm
- push TempDoub;
- end;
- end;
- varSingle :
- asm
- push Single(Params[I]);
- end;
- varArray:
- asm
- push Pointer(Params[I]);
- end;
- varString, varUString, varStrArg, varOleStr:
- if ForceAnsi then
- begin
- AnsiStr := AnsiString(Params[I]);
- asm
- push PAnsiChar(AnsiStr);
- end
- end
- else
- asm
- push PChar(string(Params[I]));
- end;
- varEmpty, varNull:
- asm
- push 0;
- 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