Wahnsinn, riesen großes Danke! Ich hab mir da sehr den Schädel zerbrochen, warum da nix gehen wollte
Nur aber mal aus Interesse, warum funktioniert es nun so? ^^
Durch den Zusatz von var sagst du dem Compiler und der
DLL: "Hey, ich möchte das du den Inhalt hinter dem Adresszeiger füllst oder dir selber ausliest".
Beispiel:
procedure Foo(var SomeValue: Integer);
ist im Prinzip das hier:
procedure Foo(SomeValue: PInteger);
Man übergibt sozusagen den Zeiger auf einen Übergabewert, also nur die Hausnummer und nicht das Haus.
Wenn du nun sowas machst:
procedure Foo(var SomeValue: PInteger);
sieht der Compiler sowas:
procedure Foo(SomeValue: PPInteger);
Sozusagen ein Doppelpointer. Die Hausnummer einer Hausnummer eines Hauses.
Da kann die
DLL nichts draus lesen, weil es nur der Zeiger auf den richtigen Zeiger auf den Parameternamen ist.