Autor Beitrag
Jacdelad
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 109

Win XP Pro
Borland Developer Studio 2006 Architect
BeitragVerfasst: So 02.04.06 13:24 
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:

ausblenden 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.
Grenzgaenger
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: 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...

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1033
Erhaltene Danke: 1

WinXP Pro SP2
Delphi 6 Prof.
BeitragVerfasst: 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

_________________
"people knew how to write small, efficient programs [...], a skill that has subsequently been lost"
Andrew S. Tanenbaum - Modern Operating Systems
Jacdelad Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 109

Win XP Pro
Borland Developer Studio 2006 Architect
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 109

Win XP Pro
Borland Developer Studio 2006 Architect
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 109

Win XP Pro
Borland Developer Studio 2006 Architect
BeitragVerfasst: 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