Autor Beitrag
Darki
Hält's aus hier
Beiträge: 15



BeitragVerfasst: Sa 18.06.05 14:56 
Hallo zusammen,

komme einfach nicht weiter und verstehe den Fehler nicht :-)

Habe in einer DLL das Result als Array definiert, wenn ich es jetzt im Programm selber ansprecher, sagt er mir
immer :
[Fehler] Unit1.pas(53): Inkompatible Typen: 'Array' und 'varar1'



Hier mal der Code:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
type varar=array [0..3] of real;
function werte(eins,zwei,drei: real; Name, Status: String; gbj: Integer):
varar; stdcall;
.
.
.
result[0] := Ergebnis1;
result[1] := Ergebnis2;
result[2] := Ergebnis3;
result[3] := Ergebnis4;

Das war der Code aus der DLL.

Im Programm selber sieht es so aus:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
type varar1=array [0..3] of real;
function werte(eins,zwei,drei: real; Name,Status: String; gbj: Integer):
varar1; stdcall;
external 'werte.dll';

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
var
.
.
.
ergeb:array [0..3] of real;
begin
.
.
.
ergeb:=werte(eins,zwei,drei,Name,Status,gbj);



Wäre super wenn mir jemand helfen könnte.

Viele Grüße

Moderiert von user profile iconraziel: Code- durch Delphi-Tags ersetzt.


Zuletzt bearbeitet von Darki am Sa 18.06.05 15:04, insgesamt 1-mal bearbeitet
Radioactive
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 179

Win 98, Win XP Home SP2
D3 Prof, D7 Pers, D2005 Pers
BeitragVerfasst: Sa 18.06.05 14:58 
In welcher Unit (oben oder unten?) und in welcher Zeile kommt der Fehler?

_________________
Radioactive
"Wer scrollt, verliert!" Matthias Stein, Informatiklehrer am GG
Darki Threadstarter
Hält's aus hier
Beiträge: 15



BeitragVerfasst: Sa 18.06.05 15:03 
der Fehler kommt bei:
ergeb:=werte(eins,zwei,drei,Name,Status,gbj);


Zuletzt bearbeitet von Darki am Sa 18.06.05 15:06, insgesamt 1-mal bearbeitet
Darki Threadstarter
Hält's aus hier
Beiträge: 15



BeitragVerfasst: Sa 18.06.05 15:05 
user profile iconDarki hat folgendes geschrieben:
der Fehler kommt bei:
ergeb:=werte(eins,zwei,drei,Name,Status,gbj);
ceding
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 53

Win XP
D 4
BeitragVerfasst: Sa 18.06.05 15:33 
ich weis nicht aber ich glaube das speicherfeld ist real aber du willst einen String speichern
da musst du das umwandeln

_________________
Es gibt kein Gott!! Was ist die Seele ?
Radioactive
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 179

Win 98, Win XP Home SP2
D3 Prof, D7 Pers, D2005 Pers
BeitragVerfasst: Sa 18.06.05 15:34 
Das heißt, deine Funktion "werte" gibt einen falschen Typ zurück. Du musst den Rückgabewert von "varar1" in "array [0..3] of real" ändern!

_________________
Radioactive
"Wer scrollt, verliert!" Matthias Stein, Informatiklehrer am GG


Zuletzt bearbeitet von Radioactive am Sa 18.06.05 15:37, insgesamt 2-mal bearbeitet
Darki Threadstarter
Hält's aus hier
Beiträge: 15



BeitragVerfasst: Sa 18.06.05 15:35 
Nein, eigentlich sind alles Reals
ceding
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 53

Win XP
D 4
BeitragVerfasst: Sa 18.06.05 15:35 
es müsste dan so heißen

ausblenden Quelltext
1:
ergeb:=strtoint(werte(eins,zwei,drei,Name,Status,gbj));					


ich weis nicht ob du das willst

_________________
Es gibt kein Gott!! Was ist die Seele ?
Radioactive
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 179

Win 98, Win XP Home SP2
D3 Prof, D7 Pers, D2005 Pers
BeitragVerfasst: Sa 18.06.05 15:38 
Ich habe meine Aussage noch mal korrigiert -> siehe oben.

Zitat:
Das heißt, deine Funktion "werte" gibt einen falschen Typ zurück. Du musst den Rückgabewert von "varar1" in "array [0..3] of real" ändern!

_________________
Radioactive
"Wer scrollt, verliert!" Matthias Stein, Informatiklehrer am GG
Darki Threadstarter
Hält's aus hier
Beiträge: 15



BeitragVerfasst: Sa 18.06.05 15:44 
Oh, super jetzt nimmt er es an.
aber wenn ich jetzt sage:
ausgabe:=ergeb[0];

dann heißt es ungültige gleitkommaoperation.

wenn ich nur die dll ausführe ohne mir eine Augabe
geben zu lassen kommt keine fehlermeldung, also muss
die dll ja dann ok sein.
Radioactive
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 179

Win 98, Win XP Home SP2
D3 Prof, D7 Pers, D2005 Pers
BeitragVerfasst: Sa 18.06.05 15:47 
Ist ausgabe ein string oder ein Real? Wenn es ein string ist, musst du den Array-Wert erst mit FloatToStr oder FloatToStrF umwandeln :!:

_________________
Radioactive
"Wer scrollt, verliert!" Matthias Stein, Informatiklehrer am GG
Darki Threadstarter
Hält's aus hier
Beiträge: 15



BeitragVerfasst: Sa 18.06.05 15:57 
Das habe ich gemacht.
Sobald ich auf ergeb zugreifen will, kommt der fehler.
wenn ich auf ergeb nicht zu greife kommt keine Fehlermeldung :?:
Radioactive
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 179

Win 98, Win XP Home SP2
D3 Prof, D7 Pers, D2005 Pers
BeitragVerfasst: Sa 18.06.05 16:00 
Wie greifst du denn auf ergeb zu?

_________________
Radioactive
"Wer scrollt, verliert!" Matthias Stein, Informatiklehrer am GG
Darki Threadstarter
Hält's aus hier
Beiträge: 15



BeitragVerfasst: Sa 18.06.05 16:06 
Indem ich es ausgeben lasse:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
var ergebnis:real;
.
.
begin
.
.
.
ergebnis := ergeb[0];
label1.caption := floattostr(ergebnis);


Moderiert von user profile iconraziel: Code- durch Delphi-Tags ersetzt.
Darki Threadstarter
Hält's aus hier
Beiträge: 15



BeitragVerfasst: Sa 18.06.05 16:16 
Ok, der fehler muss doch an der dll ansich liegen.

Aber 1000 Dank, Du hast mir echt weiter geholfen!!