![]() |
DLL mit CallBack in Delphi importieren
Liste der Anhänge anzeigen (Anzahl: 1)
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:
Danke schonmal.
[...]
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. Gruß Torsten |
AW: DLL mit CallBack in Delphi importieren
Die Callback-Routine(n) sollst Du ja schreiben und an die entsprechenden Funktionen übergeben.
|
AW: DLL mit CallBack in Delphi importieren
Zitat:
"Die USBCAN-Libary stellt zwei Typen von CallBack Funktionen zur Verfügung..." Deshalb wollte ich mir die DLL mal anschauen, nur mit welchem Programm? |
AW: DLL mit CallBack in Delphi importieren
|
AW: DLL mit CallBack in Delphi importieren
ok, Denkfehler gefunden... :coder2:
Danke für die Tips! |
AW: DLL mit CallBack in Delphi importieren
Den finde ich am Besten
Delphi-Quellcode:
- Freudsche Fehlleistung :mrgreen:
CallCackFKT
|
AW: DLL mit CallBack in Delphi importieren
Ich nochmal...
leider klappt das nicht so ganz. Die CallBack Procedure wird zwar aufgerufen und durchgelaufen, aber am Ende bekomme ich immer eine "Zugriffsverletzung bei Adresse 024E4708. Lesen von Adresse 00000000." Dies ist bei beiden erstellten CB-Proceduren bei Verlassen dieser :( |
AW: DLL mit CallBack in Delphi importieren
Zitat:
|
AW: DLL mit CallBack in Delphi importieren
Da hatte ich schon mehrere Versionen getestet, leider ohne Erfolg.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:04 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