AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein rufid.dll aus eigenem delphi anschprechen und nutzen
Thema durchsuchen
Ansicht
Themen-Optionen

rufid.dll aus eigenem delphi anschprechen und nutzen

Offene Frage von "StefanA"
Ein Thema von SwordfishCenter · begonnen am 17. Jan 2006 · letzter Beitrag vom 17. Jan 2012
Antwort Antwort
shyd

Registriert seit: 7. Feb 2009
2 Beiträge
 
#1

Re: rufid.dll aus eigenem delphi anschprechen und nutzen

  Alt 10. Feb 2009, 20:48
Nach diversen Testläufen und google-Suchen bin ich schon dichter an meinem Ziel. Die Funktion UseVersion rufe ich einfach mit einem integer auf.
Kann mir jetzt noch jemand sagen wie ich SucheTelefonnummer füttern muss und was diese dann zurückgibt? Ich habe versucht den Delphi-scr-code soweit zu verstehen, es hat aber nicht gereicht.
Wie ich das sehe, brauch die Funktion SucheTelefonnummer folgende Parameter:
1. ein char-array mit der Nummer, die ich suchen möchte,
2. eine Structure als output mit den gefundenen Daten
3. ein integer für eine Anzahl (dessen Sinn ich aber nicht verstehe)

Es wäre super wenn einer sich die Mühe machen kann um mir den delphi-code aus diesem Projekt näher zu bringen.

Gruß

PS: sry4doppelPost
  Mit Zitat antworten Zitat
StefanA

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

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
CCRDude

Registriert seit: 9. Jun 2011
678 Beiträge
 
FreePascal / Lazarus
 
#3

AW: rufid.dll aus eigenem delphi anschprechen und nutzen

  Alt 17. Jan 2012, 08:41
Praktisch wäre es, wenn Du Deine verwendete Delphi-Version in Dein Profil schreibst, dann würdest Du wahrscheinlich blitzschnell die Antwort bekommen, daß da die Umstellung PChar = PAnsiChar ws. PWideChar bzw. String = AnsiString vs. WideString das Problem verursachen könnte
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.222 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: rufid.dll aus eigenem delphi anschprechen und nutzen

  Alt 17. Jan 2012, 08:42
Die Frage ist auch ob nicht auf DLL-Seite die Schnittstelle nicht auch schon Unicode-Enabled ist.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
StefanA

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

AW: rufid.dll aus eigenem delphi anschprechen und nutzen

  Alt 17. Jan 2012, 09:21
Vielen Dank für eure Antworten. Ihr seid ja richtig schnell

Verwende Delphi6 Pro.

Hab mal weiter getestet:

Wenn ich die Exception abfange stehen die geforderten Infos in EList drin. Also schließe ich ein Unicode Problem mal aus. Dummerweise geht aber nach mehrern Aufrufen der Speicherverbrauch meiner Anwendung hoch. Das geht solange bis die Anwendung abschmiert. Hab das sample etwas angepasst und rufe über einen Timer die Funktion mehrmals hinteinander auf (ohne die DLL zu entladen und wieder neu zu laden).

Ein Dispose (EList) am Ende läuft in eine InvalidPointer Operation.

Gruß
Stefan
  Mit Zitat antworten Zitat
gmc616

Registriert seit: 25. Jun 2004
Ort: Jena
627 Beiträge
 
Delphi 10.3 Rio
 
#6

AW: rufid.dll aus eigenem delphi anschprechen und nutzen

  Alt 17. Jan 2012, 08:42
ich kann mich irren, aber sollte man vorher nicht für EList Speicher reservieren?

 EList := new(PDLLEintrag); ,


wieder freigaben mit  dispose (EList) nicht vergessen.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:09 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz