Einzelnen Beitrag anzeigen

carknue

Registriert seit: 26. Mai 2005
37 Beiträge
 
Turbo Delphi für Win32
 
#9

Re: Problem: Format %p ungültig o. nicht kompatibel mit Argu

  Alt 20. Aug 2005, 19:28
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;
  Mit Zitat antworten Zitat