Einzelnen Beitrag anzeigen

StefanA

Registriert seit: 17. Jan 2012
2 Beiträge
 
Delphi 6 Professional
 
#10

AW: rufid.dll aus eigenem delphi anschprechen und nutzen

  Alt 17. Jan 2012, 08:32
Hallo zusammen,

versuche verzweifelt mit dem Beispiel von TKC die Rufid.dll anzusprechen. Aktuelle Klicktel und Rufident Software ist natürlich vorhanden.


Delphi-Quellcode:
unit ruflightu;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, DdeMan;

type
  TitelArray = Array[1..5] of Byte;

  PDLLEintrag = ^TDLLEintrag;
  TDLLEintrag = Packed Record
    Markiert : Boolean;

    Titel : TitelArray;

    Adel : Byte;
    NameVorsatz : Byte;
    NameZusatz : Byte;

    Geschlecht : Byte;
    Vorname : String[30];
    Anrede : String[10];
    Name : String[120];
    Zusatz : String[120];
    Ortsteil : String[40];
    Strasse : String[46];
    Hausnummer : String[10];
    HausnummerZusatz : String[20];
    Land : String[3];
    PLZ : String[5];
    Ort : String[70];
    Vorwahl : String[10];
    TelZusatz : String[15];
    Telefon : String[20];
  end;
  
  PDLLArray = ^TDLLArray;
  TDLLArray = Array[1..1] of TDLLEintrag;


  TUseVersion = procedure(V : Byte); stdcall;
  TSucheTelefonnummer = procedure( Nummer : PChar; var EintragListe : PDLLEintrag;
                                   var EintragAnzahl : LongInt ); stdcall;


  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    ListBox1: TListBox;
    RadioButton1: TRadioButton;
    RadioButton2: TRadioButton;
    procedure Button1Click(Sender: TObject);
    procedure RadioButton2Click(Sender: TObject);
    procedure RadioButton1Click(Sender: TObject);
  private
    { Private-Deklarationen }
    DllHdl : THandle;
  public
    { Public-Deklarationen }
  end;


var
 Form1 : TForm1;

 DllHdl : THandle;
 FuncPtr : TFarProc;
 PSucheTelefonnummer : TSucheTelefonnummer;
 PUseVersion : TUseVersion;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
var
 EList : PDLLEintrag;
 ETemp : PDLLArray;
 ECount : LongInt;
 co : LongInt;
begin
  PSucheTelefonnummer( PChar( Edit1.Text ), EList, ECount );
  ETemp := PDLLArray( EList );

  for co := 1 to ECount do begin
   ListBox1.Items.Add( ETemp^[co].Name + #32 + ETemp^[co].Vorname + #32 +
                       ETemp^[co].Vorwahl + '-' + ETemp^[co].Telefon );
  end;
end;

procedure TForm1.RadioButton2Click(Sender: TObject);
begin
  PUseVersion( 2 );
end;

procedure TForm1.RadioButton1Click(Sender: TObject);
begin
  PUseVersion( 1 );
end;

initialization
  DllHdl := 0;
  FuncPtr := Nil;

  DllHdl := LoadLibrary( 'rufid.dll' );
  if DllHdl = 0 then
   Halt;

  FuncPtr := GetProcAddress( DllHdl, 'SucheTelefonnummer' );
  if FuncPtr = nil then
    Halt
  else
   @PSucheTelefonnummer := FuncPtr;

  FuncPtr := GetProcAddress( DllHdl, 'UseVersion' );
  if FuncPtr = nil then
    Halt
  else
   @PUseVersion := FuncPtr;

end.
Bei PSucheTelefonnummer konnt dann ne Exception:

.. raised exception class EConvertError with message ''' ist kein gültiger Integerwert'. Process stopped. Use Step or Run to continue.

Was läuft hier falsch? Hat jemand ein funktionierendes Beispiel wie ich diese DLL mit Delphi ansprechen kann?

Vielen Dank schon mal
Stefan
  Mit Zitat antworten Zitat