- Код: Выделить всё
type
Teda_get_one_float = function (Node: pchar;Tag: pchar;Field:pchar;Val:pointer): Integer;
procedure TForm1.Button1Click(Sender: TObject);
var LibLangFile : TLibHandle;
NameComponent : Teda_get_one_float;
fileName : string;
ret : Single;
rez : integer;
begin
fileName:=Edit1.Text;
LibLangFile := LoadLibrary(fileName);
if LibLangFile >= 32 then begin
NameComponent := nil;
NameComponent := Teda_get_one_float(GetProcAddress(LibLangFile,'eda_get_one_float'));
if @NameComponent<>nil then begin
try
ret:=99;
rez:=NameComponent(Pchar(Edit2.Text),Pchar(Edit3.Text),Pchar(Edit4.Text),@ret);
Memo1.Lines.Add('rez='+inttostr(rez)+' val='+floattostr(ret));
except
Memo1.Lines.Add('ERROR');
end;
end else begin
Memo1.Lines.Add('NameComponent=nill');
end;
FreeLibrary(LibLangFile);
end else begin
Memo1.Lines.Add('LibLangFile<32');
end;
end;
Ошибку выдает при вызове функции. Если использовать статическое подключение все ок.
- Код: Выделить всё
//рабочий код
function eda_get_one_float(Node: pchar;Tag: pchar;Field:pchar;Val:pointer): Integer;stdcall;external 'vdba.dll';
procedure TForm1.Button2Click(Sender: TObject);
var
ret : Single;
rez : integer;
begin
try
ret:=99;
rez:=eda_get_one_float(Pchar(Edit2.Text),Pchar(Edit3.Text),Pchar(Edit4.Text),@ret);
Memo1.Lines.Add('rez='+inttostr(rez)+' val='+floattostr(ret));
except
Memo1.Lines.Add('ERROR');
end;
end;
мне нужно что бы подключалось динамически, что бы не компилировать два разных exe для машин где есть эта dll и где нет. возможно я что то не так делаю? Заранее спасибо