Delphi-PRAXiS
Seite 2 von 4     12 34      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Die Delphi-IDE (https://www.delphipraxis.net/62-die-delphi-ide/)
-   -   Assembler Files einbinden (https://www.delphipraxis.net/144506-assembler-files-einbinden.html)

FrEEzE2046 9. Dez 2009 13:53

Re: Assembler Files einbinden
 
Zitat:

Zitat von gammatester
Ansonsten Aufrufkonventionen beachten/anpassen: stdcall, pascal, cdecl Stichwort Calling conventions in Onlinehilfe.

Die Aufrufkonventionen kenne ich. Müsste bei mir natürlich register sein, ist es aber sowieso by default.
Mein Problem ist, dass er mein object-file anmeckert, weil es angeblich 16 Bit Segmente enthält.

gammatester 9. Dez 2009 14:04

Re: Assembler Files einbinden
 
Das ist dann aber hauptsächlich ein NASM-Problem; vielleicht gibt's da ja ein Forum, wo Du nachfragen kannst.

Fridolin Walther 9. Dez 2009 14:13

Re: Assembler Files einbinden
 
Du solltest auch darauf achten, daß es durchaus unterschiedliche Object Dateiformate gibt. Die zwei gängigsten Formate sind OMF und COFF. Delphi versteht dabei nur OMF. Die meisten anderen Entwicklungstools wie z.B. Visual Studio benutzen das COFF Format. Da die von NASM erzeugten Objektdateien in Visual Studio nutzbar sind, würde ich vermuten, daß es COFF Dateien erzeugt. Ob NASM evtl. auch OMF Dateien erzeugen kann, kann ich nicht sagen (aber ein Blick in die Hilfe sollte helfen). Ansonsten solltest Du einen Assembler verwenden, der OMF Dateien erstellen kann, wie z.B. der bereits genannte TASM32.

FrEEzE2046 9. Dez 2009 14:14

Re: Assembler Files einbinden
 
Okay, mit MASM kompiliert und schon geht's. Irgendwie kann NASM(W) keine 32-Bit OMF-OBJ Dateien erzeugen ... okay, dann danke an alle.

FrEEzE2046 9. Dez 2009 14:16

Re: Assembler Files einbinden
 
Zitat:

Zitat von Fridolin Walther
Du solltest auch darauf achten, daß es durchaus unterschiedliche Object Dateiformate gibt. Die zwei gängigsten Formate sind OMF und COFF. Delphi versteht dabei nur OMF. Die meisten anderen Entwicklungstools wie z.B. Visual Studio benutzen das COFF Format. Da die von NASM erzeugten Objektdateien in Visual Studio nutzbar sind, würde ich vermuten, daß es COFF Dateien erzeugt. Ob NASM evtl. auch OMF Dateien erzeugen kann, kann ich nicht sagen (aber ein Blick in die Hilfe sollte helfen). Ansonsten solltest Du einen Assembler verwenden, der OMF Dateien erstellen kann, wie z.B. der bereits genannte TASM32.

NASM kann COFF Objektdateien erzeugen, ja. Aber mit dem Compiler-Parameter obj erzeugt man OMF. Ganz sicher, steht auch so in der Command-Line-Hilfe (-hf).

Fridolin Walther 9. Dez 2009 14:17

Re: Assembler Files einbinden
 
Ich kenn NASM nicht. Benutze persönlich MASM oder TASM32. War nur eine Vermutung meinerseits.

gammatester 9. Dez 2009 14:35

Re: Assembler Files einbinden
 
Da Du bei nasm/obj eine "16-Bit Segment"-Fehlermeldung erhälst, fehlt vielleicht eine 32-Bit directive, zB etwas wie section .text use32 (aus einem alten aes.asm, habe keine Ahnung von nasm).

Gruß Gammatester

Neutral General 9. Dez 2009 14:49

Re: Assembler Files einbinden
 
versuche mal bei NASM

Delphi-Quellcode:
[BITS 32]
; Code...

FrEEzE2046 14. Dez 2009 12:11

Re: Assembler Files einbinden
 
Zitat:

Zitat von Neutral General
versuche mal bei NASM
Delphi-Quellcode:
[BITS 32]
; Code...

Danke für deine Hilfe, aber das war natürlich das erste was ich gemacht hatte. Ich kann leider nicht sagen wo ran es liegt.

Dummerweiße zwingt mich dass jetzt dazu MASM zu benutzen und ich stoße dabei auf einige Probleme. Ich habe folgenden Code:

Code:
TITLE SimpleTest.asm
 
.686P
.XMM
.MODEL FLAT


PUBLIC Proc1
PUBLIC Proc2


.CODE

Proc1 PROC
   ; ;
Proc1 ENDP

Proc2 PROC
   ; ;
Proc2 ENDP

END

In Delphi sind Proc1 und Proc2 mt 'external' deklariert und linken das entsprechende Obj-File. So lange ich nur Proc1 (oder Proc2) kompiliere und in Delphi einbinde, habe ich keine Probleme.
Wenn ich aber zwei Routinen (also Proc1 und Proc2) kompiliere und dann entsprechend in Delphi deklariere, bekomme ich die Fehlermeldungen:

Code:
Falsche globale Symboldefinition in [...] (Objfile)
Ungenügende external Deklaration Proc1

Was genau hat sich dadurch geändert, dass ich noch eine zweite Funktion in meinem Code habe? Also MASM wirft da keine Fehler, aber Delphi mag es nicht mehr. Kompiliert habe ich es mit /omf.

FrEEzE2046 14. Dez 2009 13:55

Re: Assembler Files einbinden
 
Dazu sollte man noch sagen, dass der selbige Code (mit angepasster Parameterabfrage) sich ohne Probleme in C (VC 9) verwenden lässt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:35 Uhr.
Seite 2 von 4     12 34      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz