AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

ASM Inline code x64

Ein Thema von venice2 · begonnen am 13. Feb 2022 · letzter Beitrag vom 16. Feb 2022
Antwort Antwort
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.074 Beiträge
 
Delphi 10.4 Sydney
 
#1

AW: ASM Inline code x64

  Alt 15. Feb 2022, 07:53
Danke für das Interesse..
Video im Archiv meine Cloud meldet leider Error 504

So wie ich das sehe läuft hier einiges falsch beim Kompilieren.
DCU's sind in unterschiedlichen Ordnern.
Und was soll das mit ASM bei 32Bit!

Ich kann die Anwendungen Fehlerfrei kompilieren aber nicht mit der Abhängigkeit oder über die Projektgroup.
Möchte herausfinden warum das so ist!
Ich habe mir das Video angesehen.
Meine Frage dazu ist:
Ist die gezeigte uMain.pas mit den Assembler-Quelltext Bestandteil des MyPhone64.exe Projektes oder von SOP.exe?
Ich vermute vom SOP.exe (Release Win32).

Ich kann das Verhalten nicht ganz erklären, aber wie du auch im Video siehst, wird bei aktivierte Abhängigkeit von MyPhone64.exe zu SOP.exe zuerst der dcc64 aufgerufen, wenn du "Erzeugen" auf MyPhone64.exe aufrufst.
Erst dann wird in Folge der passende dcc32 für SOP.exe aufgerufen.
Da der inline Assembler-Quelltext nicht unter 64-Bit kompiliert, schlägt dir der erste Fehler entgegen.
Alles andere sind nur Folgefehler, weil nicht ordnungsgemäß geparst werden kann.

Wenn du das SOP.exe-Projekt so umbaust, dass es theoretisch unter 64-Bit kompilieren würde, dann könnte es funktionieren.

Code:
Checking project dependencies...
Building SOP.dproj (Release, Win64)
brcc32 command line for "SOP.vrc"
  c:\delphi\sydney\bin\cgrc.exe -c65001 SOP.vrc -foSOP.res
dcc64 command line for "SOP.dpr"
  c:\delphi\sydney\bin\dcc64.exe -$D0 -$L- -$Y- --no-config -B -Q -TX.exe -AGenerics.Collections=System.Generics.Collections;
  Generics.Defaults=System.Generics.Defaults;WinTypes=Winapi.Windows;WinProcs=Winapi.Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE -DRELEASE
  -E.\Win64\Release -Ic:\delphi\sydney\lib\Win64\release\DE;c:\delphi\sydney\lib\Win64\release;"\\NAS\Nutzer_Doku\User\Eigene
  Dateien\Embarcadero\Studio\21.0\Imports";c:\delphi\sydney\Imports;C:\Users\Public\Documents\Embarcadero\Studio\21.0\Dcp\Win64;
  c:\delphi\sydney\include;c:\Projekte\Komponenten\develop\Finetech_VC;c:\Projekte\Komponenten\develop\Finetech_C;
  c:\Projekte\Komponenten\develop\Finetech_Design;c:\Projekte\Komponenten\develop\Finetech_Dialog;
  c:\Projekte\Komponenten\develop\Finetech_ElfSectionReader;c:\Projekte\Komponenten\develop\Finetech_ElfSectionReader\Pse;
  c:\Projekte\Komponenten\develop\Finetech_Public;c:\Projekte\Komponenten\develop\Finetech_Raize;c:\Projekte\Komponenten\develop\Finetech_Serial;
  c:\Projekte\Komponenten\develop\Finetech_SpaceNav;c:\Projekte\Komponenten\develop\Resources;C:\Delphi\Jedi\jcl\lib\d27\win64;
  C:\Delphi\Jedi\jcl\source\include;c:\Delphi\RaizeKonopka\Lib\RX10.4\Win64;c:\Delphi\FastMM;c:\Delphi\FastReport\LibD27x64;
  C:\Delphi\Jedi\jvcl\lib\D27\win64;C:\Delphi\Jedi\jvcl\common;C:\Delphi\Jedi\jvcl\Resources;"C:\Delphi\VirtualTreeview\Packages\RAD Studio
  10.4\Win64\Release";C:\Projekte\Komponenten\develop\Lib\D27\Win64\Release -LEC:\Users\Public\Documents\Embarcadero\Studio\21.0\Bpl\Win64 
  -LNC:\Users\Public\Documents\Embarcadero\Studio\21.0\Dcp\Win64 -NU.\Win64\Release -NSSystem;Xml;Data;Datasnap;Web;Soap;
  -Oc:\delphi\sydney\lib\Win64\release;"\\NAS\Nutzer_Doku\User\Eigene Dateien\Embarcadero\Studio\21.0\Imports";c:\delphi\sydney\Imports;
  C:\Users\Public\Documents\Embarcadero\Studio\21.0\Dcp\Win64;c:\delphi\sydney\include;c:\Projekte\Komponenten\develop\Finetech_VC;
  c:\Projekte\Komponenten\develop\Finetech_C;c:\Projekte\Komponenten\develop\Finetech_Design;c:\Projekte\Komponenten\develop\Finetech_Dialog;
  c:\Projekte\Komponenten\develop\Finetech_ElfSectionReader;c:\Projekte\Komponenten\develop\Finetech_ElfSectionReader\Pse;
  c:\Projekte\Komponenten\develop\Finetech_Public;c:\Projekte\Komponenten\develop\Finetech_Raize;c:\Projekte\Komponenten\develop\Finetech_Serial;
  c:\Projekte\Komponenten\develop\Finetech_SpaceNav;c:\Projekte\Komponenten\develop\Resources;C:\Delphi\Jedi\jcl\lib\d27\win64;
  C:\Delphi\Jedi\jcl\source\include;c:\Delphi\RaizeKonopka\Lib\RX10.4\Win64;c:\Delphi\FastMM;c:\Delphi\FastReport\LibD27x64;
  C:\Delphi\Jedi\jvcl\lib\D27\win64;C:\Delphi\Jedi\jvcl\common;C:\Delphi\Jedi\jvcl\Resources;"C:\Delphi\VirtualTreeview\Packages\RAD Studio
  10.4\Win64\Release";C:\Projekte\Komponenten\develop\Lib\D27\Win64\Release -Rc:\delphi\sydney\lib\Win64\release\DE;c:\delphi\sydney\lib\Win64\release;
  "\\NAS\Nutzer_Doku\User\Eigene Dateien\Embarcadero\Studio\21.0\Imports";c:\delphi\sydney\Imports;
  C:\Users\Public\Documents\Embarcadero\Studio\21.0\Dcp\Win64;c:\delphi\sydney\include;c:\Projekte\Komponenten\develop\Finetech_VC;
  c:\Projekte\Komponenten\develop\Finetech_C;c:\Projekte\Komponenten\develop\Finetech_Design;c:\Projekte\Komponenten\develop\Finetech_Dialog;
  c:\Projekte\Komponenten\develop\Finetech_ElfSectionReader;c:\Projekte\Komponenten\develop\Finetech_ElfSectionReader\Pse;
  c:\Projekte\Komponenten\develop\Finetech_Public;c:\Projekte\Komponenten\develop\Finetech_Raize;c:\Projekte\Komponenten\develop\Finetech_Serial;
  c:\Projekte\Komponenten\develop\Finetech_SpaceNav;c:\Projekte\Komponenten\develop\Resources;C:\Delphi\Jedi\jcl\lib\d27\win64;
  C:\Delphi\Jedi\jcl\source\include;c:\Delphi\RaizeKonopka\Lib\RX10.4\Win64;c:\Delphi\FastMM;c:\Delphi\FastReport\LibD27x64;
  C:\Delphi\Jedi\jvcl\lib\D27\win64;C:\Delphi\Jedi\jvcl\common;C:\Delphi\Jedi\jvcl\Resources;"C:\Delphi\VirtualTreeview\Packages\RAD Studio
  10.4\Win64\Release";C:\Projekte\Komponenten\develop\Lib\D27\Win64\Release -Uc:\delphi\sydney\lib\Win64\release\DE;c:\delphi\sydney\lib\Win64\release;
  "\\NAS\Nutzer_Doku\User\Eigene Dateien\Embarcadero\Studio\21.0\Imports";c:\delphi\sydney\Imports;
  C:\Users\Public\Documents\Embarcadero\Studio\21.0\Dcp\Win64;c:\delphi\sydney\include;c:\Projekte\Komponenten\develop\Finetech_VC;
  c:\Projekte\Komponenten\develop\Finetech_C;c:\Projekte\Komponenten\develop\Finetech_Design;c:\Projekte\Komponenten\develop\Finetech_Dialog;
  c:\Projekte\Komponenten\develop\Finetech_ElfSectionReader;c:\Projekte\Komponenten\develop\Finetech_ElfSectionReader\Pse;
  c:\Projekte\Komponenten\develop\Finetech_Public;c:\Projekte\Komponenten\develop\Finetech_Raize;c:\Projekte\Komponenten\develop\Finetech_Serial;
  c:\Projekte\Komponenten\develop\Finetech_SpaceNav;c:\Projekte\Komponenten\develop\Resources;C:\Delphi\Jedi\jcl\lib\d27\win64;
  C:\Delphi\Jedi\jcl\source\include;c:\Delphi\RaizeKonopka\Lib\RX10.4\Win64;c:\Delphi\FastMM;c:\Delphi\FastReport\LibD27x64;
  C:\Delphi\Jedi\jvcl\lib\D27\win64;C:\Delphi\Jedi\jvcl\common;C:\Delphi\Jedi\jvcl\Resources;"C:\Delphi\VirtualTreeview\Packages\RAD Studio
  10.4\Win64\Release";C:\Projekte\Komponenten\develop\Lib\D27\Win64\Release -CC -NBC:\Users\Public\Documents\Embarcadero\Studio\21.0\Dcp\Win64 
  -NHC:\Users\Public\Documents\Embarcadero\Studio\21.0\hpp\Win64 -NO.\Win64\Release SOP.dpr
[dcc32 Error] SOP.dpr(21): E1025 Unsupported language feature: 'ASM'
[dcc32 Warning] SOP.dpr(23): W1011 Text after final 'END.' - ignored by compiler
Failed
Elapsed time: 00:00:00.3

Geändert von TiGü (15. Feb 2022 um 08:01 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.378 Beiträge
 
Delphi 12 Athens
 
#2

AW: ASM Inline code x64

  Alt 15. Feb 2022, 08:11
ganz einfacher Test:
  • neues VCL-Projekt / Projektgruppe
  • dort ins FormCreate ein ShowMessage(SizeOf(Pointer).ToString);
  • weiteres Projekt hinzu
  • da Win64 hinzufügen und aktivieren
  • die Abhängigkeit zum ersten Projekt einrichten
  • nun das letzte Projekt kompilieren
  • jetzt im Ausgabeverzeichnis nach der ersten EXE suchen und starten
= wird in Debug/Win64 gefunden und zeigt 8 statt 4, obwohl es im Projekt nur das Profil für Win32 gibt.

Ich dachte erst, die Abhängigkeit liegt in der DPROJ und übernimmt so (ausversehn) die Config des Aufrufers.
In der DPROJ steht oben ja <Platform Condition="'$(Platform)'==''">Win32</Platform> , also diese Einstellung wird nur genommen, wenn nicht von außen vorgegeben,
aber es kommt aus der GROUPPROJ und da könnte Delphi/InlineCompiler es anders/richtig machen.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (15. Feb 2022 um 08:18 Uhr)
  Mit Zitat antworten Zitat
venice2
(Gast)

n/a Beiträge
 
#3

AW: ASM Inline code x64

  Alt 15. Feb 2022, 10:21
Zitat:
Ich vermute vom SOP.exe (Release Win32).
Ja.
Obwohl es zwei uMain gibt.
Aber jede für sich im eigenen Root incl. der erzeugten DCU.

Zitat:
Da der inline Assembler-Quelltext nicht unter 64-Bit kompiliert, schlägt dir der erste Fehler entgegen.
Hier darf aber kein Fehler auftreten denn SOP.exe muß mit dcc32 kompiliert werden.
Da ist die IDE bzw. der Compiler anscheinend zu dumm zu erkennen das es hier um 32Bit bzw.. eine Kombination von 32/64Bit geht.

In VS(Visual Studio) kann ich mehrere Konfigurationen festlegen x86/x64 usw.. dort wird jeweils der korrekte Compiler beim Kompilieren ausgeführt.
Nur mal so nebenbei.

Zitat:
Wenn du das SOP.exe-Projekt so umbaust, dass es theoretisch unter 64-Bit kompilieren würde, dann könnte es funktionieren.
Meine Vermutung ist ganz einfach das die Reihenfolge wie die Projekte kompiliert werden nicht stimmt bei aktivierter Abhängigkeit.
Erst muß diese und dann das aufgerufenen Projekt kompiliert werden. Das scheint aber nicht so zu sein.
Wenn ich doch weiß das mein Hauptprogramm ohne die Abhängigkeit nicht funktioniert dann muß logischer weise erst diese erstellt werden damit
das Hauptprogramm überhaupt funktioniert. Aber bitte mit dem richtigen Compiler.

Es ist doch nicht der Sinn des Programmierers Fehler beim erstellen von Konfigurationen für die Kompilierung der IDE\Compiler für Delphi auszubügeln
wenn hier solche Sachen auftreten das weder eine Abhängigkeit noch das erstellen einer Projektgroup verschiedener Builds (Konfigurationen) auftreten\nicht funktionieren.

Wie ich schon sagte..
Ich kann jedes Projekt eigenständig erstellen und es Kompiliert Fehlerfrei.
Aber nicht auf den oder die aufgezeigten von der IDE bereitgestellten Möglichkeiten.
Warum stellt man diese zur Verfügung wenn sie nicht funktionieren?

Ich hatte ja schon gefragt wie ich es umbauen könnte.
Leider kam diesbezüglich noch kein Vorschlag siehe..
Delphi-Quellcode:
procedure ClearPendingExceptions;
asm
  FNCLEX
end;
Scheint ja als eigene Procedure nicht zu funktionieren.
Nur warum funktioniert dann meine Rgb2Gray Funktion wenn "asm inline" angeblich unter 64Bit nicht funktioniert.
Sehr unverständlich das ganze.

Zitat:
ganz einfacher Test:
Danke! Obwohl ich jetzt nicht erkenne was du damit jetzt aussagen willst.
Das es falsch bzw. richtig ausgeführt wird in deinem Test?

Aus meiner Sicht läuft hier definitiv etwas ganz gehörig schief!

Geändert von venice2 (15. Feb 2022 um 11:04 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.378 Beiträge
 
Delphi 12 Athens
 
#4

AW: ASM Inline code x64

  Alt 15. Feb 2022, 10:27
Nja, vermutlich sind die Abhängigkeiten eher für sowas wie Packages gedacht, welche ja naturbedingt im selben System vorliegen.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
venice2
(Gast)

n/a Beiträge
 
#5

AW: ASM Inline code x64

  Alt 15. Feb 2022, 10:37
Nja, vermutlich sind die Abhängigkeiten eher für sowas wie Packages gedacht, welche ja naturbedingt im selben System vorliegen.
Möglich nur dann sollte man das dem Developer mitteilen so das er es gar nicht erst versucht. Traurig das ganze.
Nur wenn ich mit DLL's arbeite werden diese ja auch als Abhängigkeit addiert.

Fazit daraus..
Abhängigkeit scheint nicht gleich Abhängigkeit zu sein.
Es steht hier nicht das Abhängigkeit ausschließlich für Bibliotheken vorgesehen sind.

Geändert von venice2 (15. Feb 2022 um 10:45 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.378 Beiträge
 
Delphi 12 Athens
 
#6

AW: ASM Inline code x64

  Alt 15. Feb 2022, 10:55
siehe mein kleines Beispiel


Gut ist erstmal, dass die Settings der DPROJ verwendet werden, aber halt die aus der falschen Plattform.
Nur dass die Platform-Config ja hier nicht vorhanden ist und somit wird zumindes deren Vorfahre genutzt.


Aber noch schlimmer, es wird "teilweise" auch die falsche Config (Build) verwendet.
Und selbst wenn ich Erzeugen (Build), wird nur kompiliert (compile) und dann doch die falsche Config genutzt (vorher kompilierte DCU).
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
venice2
(Gast)

n/a Beiträge
 
#7

AW: ASM Inline code x64

  Alt 15. Feb 2022, 10:57
siehe mein kleines Beispiel


Gut ist erstmal, dass die Settings der DPROJ verwendet werden, aber halt die aus der falschen Plattform.
Nur dass die Platform-Config ja hier nicht vorhanden ist und somit wird zumindes deren Vorfahre genutzt.


Aber noch schlimmer, es wird "teilweise" auch die falsche Config (Build) verwendet.
Und selbst wenn ich Erzeugen (Build), wird nur kompiliert (compile) und dann doch die falsche Config genutzt (vorher kompilierte DCU).
Ja aber das ist doch ein Problem von Delphi nicht eins vom Entwickler.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:03 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz