Autor Beitrag
JanI
Hält's aus hier
Beiträge: 1



BeitragVerfasst: Mo 28.05.12 15:44 
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.


ausblenden 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:

ausblenden C#-Quelltext
1:
L_breturnValue =  pcidioGetSummeryOfAllBoards(l_SummeryBuffer);					



Nun in Delphi:
ausblenden 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..4of PCIDIO_SUMMERYSummerybuffer

Function  pcidioGetSummeryOfAllBoards():boolean;
   Stdcallexternal ‚pcidio.dll‘;


Aufruf im Programm:

ausblenden Delphi-Quelltext
1:
  L_bReturnValue:=pcidiogetSummeryOfAllBoards(Summerybuffer);					



Mein Problem ist die Deklaration der Funktion und der eigentliche Funktionsaufruf. Kann mir jemand weiterhelfen?


Moderiert von user profile iconNarses: Topic aus VCL (Visual Component Library) verschoben am Mo 28.05.2012 um 19:17
adina83
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 29



BeitragVerfasst: Mo 28.05.12 17:08 
Die Deklaration in Delphi hab ich wie folgt probiert:
ausblenden Delphi-Quelltext
1:
2:
Function  pcidioGetSummeryOfAllBoards(var pcidio_SummerySummeryBuffer):boolean;
   Stdcallexternal ‚pcidio.dll‘;

und den Aufruf mit:

ausblenden Delphi-Quelltext
1:
L_bReturnValue:=pcidiogetSummeryOfAllBoards(Summerybuffer);					


--> Fehlermeldung: Prozedureinsprungpunkt wurde nicht gefunden.


und

ausblenden Delphi-Quelltext
1:
L_bReturnValue:=pcidiogetSummeryOfAllBoards(@Summerybuffer);					


--> Fehlermeldung: E2197 Konstantenobjekt kann nicht als var-Parameter übergeben werden
uall@ogc
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1826
Erhaltene Danke: 11

Win 2000 & VMware
Delphi 3 Prof, Delphi 7 Prof
BeitragVerfasst: Do 07.06.12 15:55 
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:

ausblenden 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..3of TPCIDIO_SUMMERYSummerybuffer
PSummerybuffer = ^TSummeryBuffer;

var
  Summerybuffer: TSummeryBuffer;

Function  pcidioGetSummaryOfAllBoards(pcidio_SummerySummeryBuffer: PSummerybuffer): Boolean; stdcallexternal 'pcidio.dll';
L_bReturnValue:=pcidiogetSummaryOfAllBoards(@Summerybuffer);

_________________
wer andern eine grube gräbt hat ein grubengrabgerät
- oder einfach zu viel zeit