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