JanI - Mo 28.05.12 15:44
Titel: Problem beim Aufruf von funktionen aus einer dll
Ich möchte eine dll in Delphi benutzen bei der die Funktionsbeschreibung in VC++ existiert. Folgende Funktion bereitet mir dabei Probleme:
Folgende Funktion:
Aus der *.h-Datei
PCIDIO_API BOOL pcidioGetSummeryOfAllBoards(PCIDIO_SUMMERY *SummeryBuffer);
Es wird ein Zeiger auf einen Datenpuffer übergeben der au ein Datenarray vom Typ PCIDIO_Summery zeigt. Der Datenpuffer sollte 4 Kartenübersichten aufnehmen können.
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| Typdef struct PCIDIO_SUMMERYSummerybuffer { Pcidio_handle hPcidiohandle; Byte BoardIndex; Byte Slotnumber; Byte BusNumber; Byte BoardAdressJumper; Dword BoardIOAdress; }
Pcidio_summery l_SummeryBuff[4]; Bool l_bReturnValue; |
Aufruf innerhalb des Programms:
C#-Quelltext
1:
| L_breturnValue = pcidioGetSummeryOfAllBoards(l_SummeryBuffer); |
Nun in Delphi:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| Type PCIDIO_SUMMERYSummerybuffer = packed Record; Pcidio_handle : thandle; BoardIndex : byte; Slotnumber : byte; BusNumber : byte; BoardAdressJumper : byte; BoardIOAdress; : dword; End;
Var Summerybuffer : array[1..4] of PCIDIO_SUMMERYSummerybuffer
Function pcidioGetSummeryOfAllBoards():boolean; Stdcall; external ‚pcidio.dll‘; |
Aufruf im Programm:
Delphi-Quelltext
1:
| L_bReturnValue:=pcidiogetSummeryOfAllBoards(Summerybuffer); |
Mein Problem ist die Deklaration der Funktion und der eigentliche Funktionsaufruf. Kann mir jemand weiterhelfen?
Moderiert von
Narses: Topic aus VCL (Visual Component Library) verschoben am Mo 28.05.2012 um 19:17
adina83 - Mo 28.05.12 17:08
Die Deklaration in Delphi hab ich wie folgt probiert:
Delphi-Quelltext
1: 2:
| Function pcidioGetSummeryOfAllBoards(var pcidio_SummerySummeryBuffer):boolean; Stdcall; external ‚pcidio.dll‘; |
und den Aufruf mit:
Delphi-Quelltext
1:
| L_bReturnValue:=pcidiogetSummeryOfAllBoards(Summerybuffer); |
--> Fehlermeldung: Prozedureinsprungpunkt wurde nicht gefunden.
und
Delphi-Quelltext
1:
| L_bReturnValue:=pcidiogetSummeryOfAllBoards(@Summerybuffer); |
--> Fehlermeldung: E2197 Konstantenobjekt kann nicht als var-Parameter übergeben werden
uall@ogc - Do 07.06.12 15:55
http://www.ebru.de/data/pcidio-de-um-3v5.pdf
Ist echt ne schlechte Dokumentation:
Der buffer heißt summEry die Funktion summAry, deshalb findert der das nicht. Versuchs mal so:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19:
| type
TPCIDIO_SUMMERYSummerybuffer = packed record Pcidio_handle : thandle; BoardIndex : byte; Slotnumber : byte; BusNumber : byte; BoardAdressJumper : byte; BoardIOAdress; : dword; end;
TSummerybuffer = array[0..3] of TPCIDIO_SUMMERYSummerybuffer PSummerybuffer = ^TSummeryBuffer;
var Summerybuffer: TSummeryBuffer;
Function pcidioGetSummaryOfAllBoards(pcidio_SummerySummeryBuffer: PSummerybuffer): Boolean; stdcall; external 'pcidio.dll'; L_bReturnValue:=pcidiogetSummaryOfAllBoards(@Summerybuffer); |