short von C++ entspricht smallint bei Delphi.
Shortint ist zu klein, obwohl es für die auftretenden Werte
reichen würde.
Es geht um die Funktion FrontendSetMode aus der header Datei.
Delphi-Quellcode:
Procedure Tform1.SetDWTMode(mode: smallint);
begin
if mode=1 then FrontendSetMode(1);
if mode=2 then FrontendSetMode(2);
if mode=6 then FrontendSetMode(6);
end;
Declariert ist es wie folgt:
Delphi-Quellcode:
type
TForm1 = class(TForm)
Procedure SetDWTMode(mode: smallint);
procedure SetFreq(freq: string);
procedure dwtmodClick(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure checkaorClick(Sender: TObject);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;
var
Form1: TForm1;
dwt: smallint;
FrontendOpen: function(): Integer; stdcall;
FrontendClose: function(): Integer; stdcall;
FrontendSetFrequency: function(freq: double): smallint; stdcall;
FrontendSetMode: function(mode: smallint): smallint; stdcall;
FrontendSetAntennaMode: function(n: smallint): smallint; stdcall;
implementation
{$R *.dfm}
Die
dll lade ich dann so:
Delphi-Quellcode:
Dll:=LoadLibrary('
afgusbfe.dll');
dwt:=69;
if (
Dll=0)
then ShowMessage('
afgusbfe.dll not found !')
else begin
FrontendOpen:=GetProcAddress(
dll,'
FrontendOpen');
FrontendClose:=GetProcAddress(
dll,'
FrontendClose');
FrontendSetFrequency:=GetProcAddress(
dll,'
FrontendSetFrequency');
FrontendSetMode:=GetProcAddress(
dll,'
FrontendSetMode');
FrontendSetAntennaMode:=GetProcAddress(
dll,'
FrontendSetAntennaMode');
dwt:=FrontendOpen;
dwt:=FrontendSetFrequency(3995000);
dwt:=FrontendSetMode(1);
Bis hier geht der Aufruf von dwt:=FrontendSetMode(1); einwandfrei.
In dieser Procedure kommt aber die Formatfehlermeldung:
Delphi-Quellcode:
Procedure Tform1.SetDWTMode(mode: smallint);
begin
if mode=1 then dwt:=FrontendSetMode(1);
if mode=2 then dwt:=FrontendSetMode(2);
if mode=6 then dwt:=FrontendSetMode(6);
end;
In dieser Procedure klappt es dagegen wieder:
Delphi-Quellcode:
procedure Tform1.SetFreq(freq: string);
var rfreq: integer;
dwtfreq:double;
begin
rfreq:=strtoint(freq);
dwtfreq:=rfreq*1000;
dwt:=FrontendSetFrequency(dwtfreq);
label2.Caption:=inttostr(dwt);
dwt:=FrontendSetMode(1);
end;