Einzelnen Beitrag anzeigen

Johannes G.

Registriert seit: 23. Aug 2017
Ort: Lustenau
16 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#3

AW: C-dll Speicheradressen

  Alt 31. Okt 2017, 12:13
Hallo Fritz,

danke für deine schnelle Antwort!

Leider funktioniert das ganze noch nicht. Wenn ich aus dem Pdouble ein double mache, also die Matrix zurück gebe, kommt die Fehlermeldung 'Access Violation at ....: read of the address ...'

Eine andere Funktion der gleichen DLL ist auch so aufgebaut, nur mit dem Unterschied keine Matrix(*df[]) sondern eine normale Variable (*y). Ich habe es bei dieser Funktion auch so gemacht, dass ich auf diese Adresse schreibe mit y^:=, siehe unten. Hat alles wunderbar funktioniert!
Code:
function f(k:integer; x: Tarray; y: Pdouble): integer; cdecl;
 begin
    if k=0 then
    begin
      y^ := x[0]*x[0]/4 + x[1]*x[1]/5 + x[0] - 0.5;
    end else
    begin
      y^ := x[0]*x[0]/4 + x[1]*x[1]/2 + x[1] - 0.5;
    end;
    result := 0;
 end;
C-Funktionsaufruf:
Code:
int f( int k, double x[], double *y)
Mit der Beschreibung der Funktion:
Code:
Funktion, welche das n × n–System beschreibt.
In
int k;
double x[], y;
...
f( k, x, &y);
...
wird der Wert der k-ten Komponentenfunktion des Systems an der Stelle x
(Vektor der Länge n) berechnet und das Ergebnis (also eine Zahl) nach y geschrieben.
(Im Gegensatz zum Verfahren newt berechnet hier die Funktion f
nur eine Komponente des nicht linearen Systems!)
Ich stehe im Moment ziemlich auf der Leitung wie ich das mit dem Pointer auf das Array (bzw. Matrix) realisieren soll.
Vielleicht hat noch jemand eine Idee?

Gruß Johannes
  Mit Zitat antworten Zitat