Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Problem mit "Exit"


Jacdelad - So 02.04.06 13:24
Titel: Problem mit "Exit"
Hallo,

ich habe ein Problem mit einer DLL, die ich in Delphi 7 schreibe: Die DLL ist für ein Programm in XProfan 8 und höher gedacht. Dazu muss der DLL-Aufruf in Variablen schreiben, deren Adresse ich im Aufruf übergebe. Hier mal ein Teil des Codes:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
library Parcival;

uses
  SysUtils,
  Windows,
  StrUtils,
  Math,
  Graphics;

var err,itr:^Integer;
  
{$R *.res}

function Parse(fx2:ANSIString;term2:PChar;fehler,iterations:Integer):Integer;stdcall;
var h,g,f,e:Integer;goon,comma:Boolean;fx,z,p,q,es:ANSIString;x,y,ze:Extended;tr:TRoundToRange;
begin
err:=Ptr(fehler);
itr:=Ptr(iterations);
//Code...z.B: itr^:=25; ...
exit;
Result:=0;
end;


exports Parse name 'Parse';

begin
end.



Mein Problem ist, dass die DLL keinen Fehler erzeugt, wenn ich sie ohne exit beende. Beim exit stürzt mein Prog aber ab. Kann mir jemand helfen???

Jac

Moderiert von user profile iconGausi: Delphi-Tags hinzugefügt.


Delete - So 02.04.06 13:51

kenn mich zwar mit DLL's nicht aus. aber warum beendest du deine funktionen nicht ordentlich? wenn dir die abfragen mit if zu mühsam sind.. nimm doch goto.. und spring an das ende der routine.... ggf. nimm noch 'n wert mit den du später setzen möchtest...

hier mal aus dem kopf...


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
procedure foo;
label xy; //deklaration des labels
begin
 if...
  if...
    if...
  end...
   if ....
    while...
//      fehler
      if fehler then goto xy; // zum label springen
     for...
       case...
         if....
 ...
xy; //sprungziel
 ...
end;


MrSaint - So 02.04.06 14:40

Probier doch mal, das Result gleich am Anfang der Procedure zu setzen. Wenn du ein Exit vor dem Result := hast, ist der Wert von Result "undefiniert". Sprich, da kann so ziemlich alles drinstehen. Vielleicht spinnt dann die Host-Anwendung, wenn sie keinen richtigen Rückgabewert bekommt....


MrSaint


Jacdelad - So 02.04.06 17:46

@Grenzgaenger: Die Funktion enthält etliche verschalchtelte if- unf while-Strukturen, das würde äußerst kompliziert werden.

@MrSaint: Naja, das hab ich jetzt nicht hingeschrieben, wird aber gleich am Anfang erledigt!

Leider bin ich immer noch nicht weiter...

Jac


Jacdelad - So 02.04.06 17:53

Ach ja, mit GoTo funktionierts auch nicht. Die Funktion läuft an sich fehlerfrei; der Fehler tritt nur auf, wenn sie von einer anderen Funktion aufgerufen wird!

Jac


Jacdelad - Mo 03.04.06 11:57

Ich hab den Fehler gefunden! Die Funktion an sich war nicht fehlerhaft, sondern die aufrufende! Danke für die Mühe!!!

Jac