Autor Beitrag
Pellaeon
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 19



BeitragVerfasst: Mo 17.09.07 08:49 
Hallo,

ich muss eine DLL in Delphi schreiben, welche double-Werte in Form von Feldern bekommt. Die DLL soll von Delphi und auch von C-Programmen aus nutzbar sein. Daher will ich die Felder als Zeiger übergeben. Aber irgendwie klappt das net wirklich gut

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
type DoubleArray  = array of Double;
type PDoubleArray = ^DoubleArray;

procedure showField(values : PDoubleArray;number : integer); stdcall;
begin
   ...


Das hier z.B. bringt mir Speicherzugriffsfehler. Dabei hab ich das aus der Delphi-Hilfe entnommen ... .

ausblenden Delphi-Quelltext
1:
procedure showField(values : PDouble;number : integer); stdcall;					

Das funktioniert, aber ich muss jedes mal den Zeiger mit inc erhöhen, da der Zeiger sich ja nicht als Feld behandeln lässt. Ist also auch sehr nervig.

Wie kann man das besser machen?

MfG Pellaeon

Moderiert von user profile iconGausi: Code- durch Delphi-Tags ersetzt
Moderiert von user profile iconTino: Überflüssige Zeilenumbrüche entfernt.


Zuletzt bearbeitet von Pellaeon am Mo 17.09.07 12:28, insgesamt 1-mal bearbeitet
Lossy eX
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1048
Erhaltene Danke: 4



BeitragVerfasst: Mo 17.09.07 09:33 
Sobald Delphi annimmt, dass es sich um ein dynamisches Array handelt und du versuchst die Größe zu erfragen, dann greift er auf die Stelle (Pointer - $04) zu um die Länge auszulesen. Und das wird dann in den meisten Fällen schief gehen.

Die Lösung mit dem PDouble und der Größe gefällt mir persönlich am Besten.

Es müsste aber auch möglich sein, dass du einen Arraytypen definierst und mit diesem arbeitst.
ausblenden Delphi-Quelltext
1:
2:
3:
type
  TDoubleArray = array [0..$FFFF] of Double;
  PDoubleArray = ^TDoubleArray;

Den Parameter würde ich aber der Einfachheit halber als PDouble lassen aber dann auf den Arraytypen (pointer) casten.
ausblenden Delphi-Quelltext
1:
PDoubleArray(values)^[Index]					

Aber wie schon gesagt. Mir gefällt die Lösung komplett ohne Pointer auf Arrays besser.

_________________
Nur die Menschheit ist arrogant genug, um zu glauben sie sei die einzige intelligente Lebensform im All. Wo nicht mal das nachhaltig bewiesen wurde.
Pellaeon Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 19



BeitragVerfasst: Mo 17.09.07 12:30 
OK danke, das funzt :)