Einzelnen Beitrag anzeigen

iaby

Registriert seit: 30. Nov 2002
Ort: BW
258 Beiträge
 
#1

Problem mit Delphi & DLL & Pointern

  Alt 16. Mär 2006, 13:37
hallo zusammen,

ich habe ein Problem und zwar will ich mit Delphi Funktionen einer .DLL-Datei nutzen. Alles soweit ja
eigentlich kein Problem, jedoch habe ich den Eindruck, dass mit der Parameterbergabe an die DLL
(insbesondere mit zu Üergebenden Pointern) etwas schief geht.
ich habe hier einmal exemplarisch das Header-File für C, was ich versucht habe, nach Delphi zu übersetzen:
Code:
...
PCIMFB2_API BOOLEAN pcimfb2InitBoards(BYTE *a_bAnzBoards);
PCIMFB2_API BOOLEAN _stdcall pcimfb2InitBoardsStdCall(BYTE *a_bAnzBoards);
...
und meine .PAS-Datei (jeweils nur Auszüge):

Delphi-Quellcode:
...
function pcimfb2InitBoards(var a_bAnzBoards: Byte): boolean; external 'PCIMFB2.dllname 'pcimfb2InitBoards';

...

//Aufrufen der Funktion im Hauptprogramm
var Anzahl: Byte;
begin
pcimfb2InitBoards(Anzahl);
showmessage(IntToStr(Anzahl));
...
die Funtkion pcimfb2InitBoards erwartet als einzigen Parameter also einen Pointer auf ein Byte.
Wie ich hier in den Foren gelesen habe, geschieht die Üergabe als Pointer in Delphi automatisch, wenn
ich die Variable im Funktions-kopf als "var" deklariere !?
Der Funktionsaufruf an sich gelingt dann zwar auch, allerdings schreibt er mir an die Stelle, auf die
der Pointer zeigt, nichts hinein (in einem C-Beispiel funktioniert es!). Es wird also immer die Zahl
ausgegeben, die schon vor Funktionsaufruf zugewiesen war (in diesem Fall 0).

Kann mir jemand helfen? Habe ich den Code überhaupt richtig nach Delphi bersetzt? Habe mit Pointer bis
jetzt nur in C Erfahrung und bin mir deshalb sehr unsicher!

Vielen Dank schonmal für Antworten im Voraus!


Gruss,
iaby



PS:
folgender Code führte auch nicht ans Ziel:
Delphi-Quellcode:
...
function pcimfb2InitBoards(a_bAnzBoards: Pointer): boolean; external 'PCIMFB2.dllname 'pcimfb2InitBoards';

...

//Aufrufen der Funktion im Hauptprogramm
var Anzahl: Byte;
begin
pcimfb2InitBoards(addr(Anzahl));
showmessage(IntToStr(Anzahl));
...
  Mit Zitat antworten Zitat