Einzelnen Beitrag anzeigen

Metschu

Registriert seit: 31. Dez 2006
151 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#1

DLL mit CallBack in Delphi importieren

  Alt 15. Dez 2013, 15:05
Hallo zusammen,

ich muss eine in C geschriebene DLL in Delphi benutzen.
Mit welcher Software kann man sich die DLL denn Anschauen? Wenn ich diese mit Delphi XE2 öffne wird mir nichts angezeigt.
Die Doku zu der DLL hab ich im PDF-Format bekommen.

Mein derzeitiges Problem ist, das die CallBack Funktionen aus der DLL nicht gefunden / geladen werden.
oder mache ich einen Denkfehler?
Der Name der Funktion "UcanCallbackFkt" steht genau so in der Dokumentation (Auszug im Anhang)

Kurzer Auszug aus meinem dem Quelltext:
Delphi-Quellcode:
[...]
uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;
[...]
  private
    { Private-Deklarationen }

  public
    { Public-Deklarationen }

  Type
   TCANUSB_SWVersion = function :dWord; StdCall;
   TCANUSB_FWVersion = function :dWord; stdCall;
   TCANUSB_CallBack = Procedure (UcanHandle_P: THandle; out bEvent_p:Byte); cdecl;
   TCANUSB_InitHardWare = function (out UcanHandle_p : THandle; bDeviceNr_P:Byte; CallCackFKT: TCANUSB_CallBack): Byte; stdCall;
  var
   CANUSB_DLL : HModule;
   CANUSB_SWVersion : TCANUSB_SWVersion;
   CANUSB_FWVersion : TCANUSB_FWVersion;
   CANUSB_CallBack : TCANUSB_CallBack;
   CANUSB_InitHardWare : TCANUSB_InitHardWare;
  end;

var
  Form1: TForm1;

const
  USBCANdll = 'USBcan32.dll';
  Fehler: array[1..10] of String = (
                              {00}   'Erfolg',
                              {01}   'Fehler 1',
                              {02}   'Zu viele Module',
                              {03}   '4',
                              {04}   '5',
                              {05}   'Kein USB - CAN Modul gefunden',
                              {...}   '8','7','9','10');
implementation

{$R *.dfm}


Function tform1.Load_CANUSB_DLL:Boolean;
begin;
 result := False;
 CANUSB_Dll := LoadLibrary(PChar('USBCAN32.dll'));
 if CANUSB_DLL <> 0 then
  begin
   @CANUSB_SWVersion := GetProcAddress(CANUSB_DLL, 'UcanGetVersion');
   @CANUSB_FWVersion := GetProcAddress(CANUSB_DLL, 'UcanGetFwVersion');
   @CANUSB_InitHardware := GetProcAddress(CANUSB_DLL, 'UcanInitHardware');
   @CANUSB_CallBack := GetProcAddress(CANUSB_DLL, 'UcanCallbackFkt');
   result:=true;

   if (@CANUSB_SWVersion=NIL)
    then Showmessage('Fehler SWVersion');
   if (@CANUSB_FWVersion=NIL)
    then Showmessage('Fehler FWVersion');

   if (@CANUSB_CallBack =NIL)
    then Showmessage('Fehler CallBack'); // <- hier bekomme ich die Fehlermeldung angezeigt. Funktion also nicht ordnungsgemäß geladen?

   if (@CANUSB_InitHardWare=NIL)
    then Showmessage('Fehler InitHW');
  end
  else MessageDlg('Fehler beim laden der DLL',mtError,[mbok],0);
end;

procedure TForm1.DLLladen(Sender: TObject);
var d:dWord;
    s:Integer;
    thd:THandle;
begin
 if Load_CANUSB_dll
  then label1.Caption:='DLL Geladen'
  else label1.Caption:=' *** KEINE DLL geladen ***'
end;

[...]
end.
Danke schonmal.

Gruß

Torsten
Angehängte Dateien
Dateityp: pdf Auszug Doku DLL.pdf (139,5 KB, 14x aufgerufen)
Torsten
  Mit Zitat antworten Zitat