![]() |
ASM Inline code x64
Habe gelesen das man unter 64Bit ASM nicht in Inline code verwenden soll.
Wie kann ich dann diesen Block als Procedure auslegen? So das er inline verwendet werden kann? Wenn möglich sollte es auch unter 32Bit funktionieren.
Delphi-Quellcode:
Würde das reichen?
FPWord := Get8087CW;
Set8087CW(MCW_EM); if (not VisInfo^.VisPointer^.Render(VisInfo^.VisBuf, StretchWidth, StretchHeight, StretchWidth, @VisData)) then begin // der block asm FNCLEX end; // end block Set8087CW(FPWord); VisInfo^.Rendering := False; Exit; end; // der block asm FNCLEX end; // end block Set8087CW(FPWord);
Delphi-Quellcode:
Aktueller Fehler. 64Bit
procedure ClearPendingExceptions;
asm FNCLEX end; Zitat:
Zudem treten dann noch andere Probleme auf. Zitat:
Delphi-Quellcode:
Warum treten dann diese Fehler auf?
function WinMain(hInstance: HINST; hPrevInstance: HINST; lpCmdLine: PChar;
nCmdShow: integer): integer; stdcall; function WndProc(WinHandle: HWND; Msg: UINT; wP: WParam; lP: LParam): LRESULT; stdcall; Weil 32Bit.exe nicht kompatibel ist zu 64Bit.exe ?? Weshalb vertragen sich die Abhängigkeiten nicht. Bei aktivierter Abhängigkeit tritt beim Start der Anwendung noch dieser Fehler auf Zitat:
Auch ohne die Zuweisung der Abhängigkeit alle Projekte kompilieren tritt der Fehler auf Da stimmt doch was nicht! |
AW: ASM Inline code x64
Nein, so geht das glaube ich nicht!
Mit ASM eingeleitete Blöcke dürften in x64 nicht funktionieren. Du musst glaube ich sowas machen:
Delphi-Quellcode:
Procedere DoIt; Assembler;
begin mov ax, 0; // nur ein Beispiel end; |
AW: ASM Inline code x64
Zitat:
Der Aufruf müßte also schon genau funktionieren. FNCLEX müßte dann also nach Delphi übersetzt werden. Oder die Procedure entsprechend angepaßt. Trotzdem Danke! Zitat:
Wird anstandslos akzeptiert trotz Abhängigkeit (allerdings in einer DLL 64Bit)
Delphi-Quellcode:
Verstehe wer will.
function TSkinEngine.Rgb2Gray(RGBValue: COLORREF): COLORREF; stdcall;
asm movzx edx, al imul edx, 19595 //Red movzx ecx, ah imul ecx, 38470 //Greean shr eax, 16 imul eax, 7471 //Blue add eax, ecx add eax, edx shr eax, 16 mov ah, al shl eax, 8 mov al, ah end; Also Basis Anwendung 64Bit funktioniert. 32Bit Anwendung ASM macht Probleme wenn ich diese als Abhängigkeit der 64Bit Anwendung zuweise. 64Bit DLL mit obiger Funktion geht ohne Probleme. |
AW: ASM Inline code x64
"Assembler" als Schlüsselwort dürfte schon ewig keine Auswirkng mehr haben und wird vom Compiler quasi ignoriert.
Assembler wird mit ASM ... END angegeben. InlineASM gibt es nur im Win32-Compiler (von Borland). Überall in neuen Compilern war man (CodeGear/Embarcadero/Idera) zu faul sowas zu bauen. Also dort wo Assember noch geht, da dann nur noch als komplette Funktion (abgesehn von Win32) und für ARM scheinbar nirgendwo, also ausschließlich x86. ![]() ![]() Hast du DCUs im selben Ausgabeverzeichnis, für alle Platformen? |
AW: ASM Inline code x64
Zitat:
Zitat:
Delphi-Quellcode:
Die Meldung die dann bei 32Bit kommt.
// der block
asm FNCLEX end; // end block Zitat:
Zitat:
Diese sind getrennt in jeweiligen Root der Projekte im Ordner "dcu" Zitat:
Delphi-Quellcode:
Funktioniert unter 64Bit.. sagte ich schon.
function TSkinEngine.Rgb2Gray(RGBValue: COLORREF): COLORREF; stdcall;
asm movzx edx, al imul edx, 19595 //Red movzx ecx, ah imul ecx, 38470 //Greean shr eax, 16 imul eax, 7471 //Blue add eax, ecx add eax, edx shr eax, 16 mov ah, al shl eax, 8 mov al, ah end; Zitat:
Das Problem sind die Abhängigkeiten. Addiere ich SOP.exe (32Bit) zu den Abhängigkeiten der 64Bit Anwendung funktioniert das Kompilieren nicht mehr. Mit den im ersten Beitrag angegebenen Fehlermeldungen. |
AW: ASM Inline code x64
Zitat:
Was genau machst du da? Wie weist du "die Abhängigkeit" zu? |
AW: ASM Inline code x64
Rechte Maustaste auf Projekt dann aus Menu "Abhängigkeiten.." anklicken. 32Bit Anwendung Checkbox aktivieren.
|
AW: ASM Inline code x64
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Anhang 54866 Das sind bei dir aber schon zwei verschiedene Projekte, richtig? Jetzt nicht irgendwie merkwürdig in sich selbst abhängig?! |
AW: ASM Inline code x64
Zitat:
64Bit ist die Basis 32Bit die Abhängigkeit hatte ich aber schon geschrieben. Bei dir wäre das Projekt1 die Basis und die andere die Abhängigkeit. Ohne Projekt 2 würde Projekt 1 nicht korrekt funktionieren. Wenn ich 64Bit kompiliere dann soll die 32Bit Anwendung ebenfalls kompiliert werden weil 64Bit abhängig von der 32Bit ist. 64Bit würde nicht korrekt funktionieren wenn die 32Bit nicht vorher kompiliert wurde. Oder anders.. Wenn ich die Projektgruppe kompiliere tritt auch hier der gemeldete Fehler auf! Kann gerne ein Video aufnehmen um es zu demonstrieren. |
AW: ASM Inline code x64
Ja, bitte!
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:17 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