Autor Beitrag
rpatsch
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Do 16.11.06 20:01 
Hallo alle zusammen,

ich habe ein Problem mit einem Assemblerprogrammaufruf. Folgender Delphicode ist vorhanden:

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:
var
  Form1: TForm1;

implementation

{$R *.dfm}
{$L uppinneu.obj}

// Das Programm soll anhand der Vorgaben W_PC, W_KPROM
// einen 4stelligen PIN berechnen
// Die Berechnung wird durch das Assemblerfile uppinneu.asm durchgeführt
// In diesem Assemblerfile wird das Unterprogramm Pinneu aufgerufen

procedure TForm1.BitBtn2Click(Sender: TObject);
var W_PC, W_KPROM, W_VAR, W_PINCODE, S_ME_FE, W_HAENDLER : String;


begin
  W_PC := MaskEdit1.Text+MaskEdit2.Text+MaskEdit3.Text;
  W_KPROM    := MaskEdit4.Text;
  W_VAR      := '5';           // Konstante
  W_PINCODE  := '0000';        // Rückgabewert
  S_ME_FE    := '0';           // Konstante
  W_HAENDLER := '0';           // Konstante
  pinneu(var w_pc,w_kprom,w_var,w_pincode,s_me_fe,w_haendler:string); external;
  edit1.Text := w_pincode;
end;


Nach dem kompilieren wird mir der Fehler 55 Undefinierter Bezeichner:'pinneu' ausgegeben. Im Assemblerfile wird aber mit:

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
memory segment public 'code'

       assume cs:memory,ds:memory,es:memory,ss:nothing

        public  pinneu

pinneu  proc    far                  ;Beginn der Procedure.

; Hier steht jetzt der Code

memory  ends
        end

die Procedure pinneu gestartet.
Kann mir jemand bei der Problemlösung helfen?

Viele Grüße aus Unterschleißheim
Rolf

Moderiert von user profile iconraziel: Delphi-Tags hinzugefügt
Jakob Schöttl
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 929
Erhaltene Danke: 1


Delphi 7 Professional
BeitragVerfasst: Do 16.11.06 20:49 
Ist bisschen schwer anzusehen. Setze bitte erstmal allen Quellcode in delphi-Tags (
außerdem kannst du auch in delphi assemlbercode schreiben

muss weg
Reinhard Kern
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 591
Erhaltene Danke: 14



BeitragVerfasst: Fr 17.11.06 03:30 
user profile iconrpatsch hat folgendes geschrieben:
Hallo alle zusammen,

ich habe ein Problem mit einem Assemblerprogrammaufruf. Folgender Delphicode ist vorhanden:

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:
var
  Form1: TForm1;

implementation

{$R *.dfm}
{$L uppinneu.obj}

// Das Programm soll anhand der Vorgaben W_PC, W_KPROM
// einen 4stelligen PIN berechnen
// Die Berechnung wird durch das Assemblerfile uppinneu.asm durchgeführt
// In diesem Assemblerfile wird das Unterprogramm Pinneu aufgerufen

procedure TForm1.BitBtn2Click(Sender: TObject);
var W_PC, W_KPROM, W_VAR, W_PINCODE, S_ME_FE, W_HAENDLER : String;


begin
  W_PC := MaskEdit1.Text+MaskEdit2.Text+MaskEdit3.Text;
  W_KPROM    := MaskEdit4.Text;
  W_VAR      := '5';           // Konstante
  W_PINCODE  := '0000';        // Rückgabewert
  S_ME_FE    := '0';           // Konstante
  W_HAENDLER := '0';           // Konstante
  pinneu(var w_pc,w_kprom,w_var,w_pincode,s_me_fe,w_haendler:string); external;
  edit1.Text := w_pincode;
end;


Nach dem kompilieren wird mir der Fehler 55 Undefinierter Bezeichner:'pinneu' ausgegeben. Im Assemblerfile wird aber mit:

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
memory segment public 'code'

       assume cs:memory,ds:memory,es:memory,ss:nothing

        public  pinneu

pinneu  proc    far                  ;Beginn der Procedure.

; Hier steht jetzt der Code

memory  ends
        end

die Procedure pinneu gestartet.
Kann mir jemand bei der Problemlösung helfen?

Viele Grüße aus Unterschleißheim
Rolf

Moderiert von user profile iconraziel: Delphi-Tags hinzugefügt


Hallo,

du musst natürlich pinneu deklarieren (wie jede andere Prozedur auch), dort kommt auch "external" hin.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
implementation

procedure  pinneu(var w_pc,w_kprom,w_var,w_pincode,s_me_fe,w_haendler:string); external;

procedure TForm1.BitBtn2Click(Sender: TObject);
     var W_PC, W_KPROM, W_VAR, W_PINCODE, S_ME_FE, W_HAENDLER : String;



Gruss Reinhard
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Fr 17.11.06 09:41 
Du kannst bei Delphi ASM-Sources direkt in den Delphi-Programmsource einbinden ...

Mit folgendem Source geht die direkte Einbindung von ASM-Source:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
Procedure WinPin(var w_pc,w_kprom,w_var,w_pincode,s_me_fe,w_haendler:string);
asm
//  EAX         ==> W_PC:       PString;
//  EDX         ==> W_kprom:    PString;
//  ECX         ==> w_var:      PString;
//  [EBP + $04] ==> w_pincode:  PString;
//  [EBP + $08] ==> s_me_fe:    PString;
//  [EBP + $0C] ==> w_haendler  PString;
////EAX \ ST(0) <== Result      (void) // Bei Funktionen der Rückgabewert ...

{Source hier}

end;


Die externe Einbindung ist wie gezeigt mit {$L ASM.obj} und der External-Deklaration ...

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
rpatsch Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Fr 17.11.06 14:41 
Ich danke euch recht herzlich für die Info. Werde die Sache in den nächsten Tagen mal weiter untersuchen. Falls weitere Fragen auftauchen, melde ich mich wieder.
Nochmals vielen Dank für die schnelle Hilfe.

Rolf