![]() |
funtion einer dll aufrufen
Guten Morgen,
ich habe eine DLL (zum ansteuern eines USB Gerätes) wie folgt eingebunden:
Delphi-Quellcode:
Den Quellcode der DLL habe ich leider nicht.
unit USB_DLL;
interface function GetUSBDeviceInfo(UsbDevices:longint;SerialNumber:pchar;LenSerialNumber:longint): longint; stdcall; implementation function GetUSBDeviceInfo(UsbDevices:longint;SerialNumber:pchar;LenSerialNumber:longint): longint; stdcall; external 'USBCAL.DLL' name 'GetUSBDeviceInfo' end. Vom Hersteller hab ich folgende information: Zitat:
Zitat:
Mein Funktionsaufruf im Programm sieht so aus:
Delphi-Quellcode:
Leider bekomme ich beim Aufruf eine AccesViolation. Warum? Habe ich die Parameter falsch übergeben oder vielleicht sogar die DLL schon falsch eingebunden?var Form1: TForm1; Error: longint; UsbDevices:longint; SerialNumber:array[0..128] of Char; LenSerialNumber:longint; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin NumberUsbDevices:=1; SerialNumberDev1:= ''; LenSerialNumber:= length(SerialNumber); Error:=GetUSBDeviceInfo(UsbDevices,SerialNumber,LenSerialNumber); end; Kann mir da einer einen Tipp geben wie ich weiter komme? :pale: Zur DLL habe ich auch ein funktionierenden Besipielcode in VB5. Das könnt ich auch noch anbieten falls mir damit einer weiterhelfen kann. |
Re: funtion einer dll aufrufen
Code:
Der Stern kennzeichnet die Variable als einen Pointer. :)
INT32*
Versuchs mal mit:
Delphi-Quellcode:
bei der Funktionsdeklaration und
PInteger
Delphi-Quellcode:
beim Aufruf.
Error := GetUSBDeviceInfo(@UsbDevices, SerialNumber, @LenSerialNumber);
|
Re: funtion einer dll aufrufen
Ich würde
Delphi-Quellcode:
benutzen.
var xy Integer
|
Re: funtion einer dll aufrufen
Korrekt ist:
Delphi-Quellcode:
Aufruf:
unit USB_DLL;
interface function GetUSBDeviceInfo(var UsbDevices: Longint; SerialNumber: PChar; var LenSerialNumber: Longint): Longint; stdcall; implementation function GetUSBDeviceInfo; external 'USBCAL.DLL' name 'GetUSBDeviceInfo'; end.
Delphi-Quellcode:
Das geht von der Voraussetzung aus das die Funktion Infos ueber genau ein Device liefert.
var
SerialNumber: array [0..255] of Char; UsbDevices: Longint; LenSerialNumber: Longint; begin LenSerialNumber := SizeOf(SerialNumber); GetUSBDeviceInfo(UsbDevices, SerialNumber, LenSerialNumber); end; Es koennte sein das der Parameter UsbDevices von einer anderen Funktion ausgefuellt worden sein muss. Auf jeden Fall soll hier ein Puffer mit einem C String gefuellt werden. Dazu muss man der Funktion in LenSerialNumber mitteilen wie gross der Puffer ist. Hinterher traegt die Funktion offensichtlich in LenSerialNumber ein wieviele Bytes sie in den Puffer kopiert hat. |
Re: funktion einer dll aufrufen
jetzt funzts! Danke!
Ich denke es lag an dem fehlenden VAR vor den Longints! Gruß Stephan |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:21 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