![]() |
Mal wieder Delphi vs. C++ DLL
Hallo,
hab hier ein komisches Phänomen was aber nur auf manchen PCs auftritt. Eine Delphi.exe (XE8) ruft eine Funktion aus einer C++ DLL vom Visual Studio 2015 auf. Visual Studio 2015 Runtime ist auf dem Problem PC installiert, wurde auch schon neu installiert. 2 weitere Programme in C++ im gleichem Ordner wie die Delphi.exe die auf die gleiche Funktion der gleicehn DLL zugreifen funktionieren Tadellos, auch auf den "Problem PCs" Deklaration in Delphi: function InitSystem:Boolean;cdecl; external 'Hardware.dll'; Es ist der erste Aufruf an die DLL. Das Delphi Programm hängt sich dann einfach weg. Stehe etwas im Wald...Ideen eurerseits ? |
AW: Mal wieder Delphi vs. C++ DLL
Zitat:
Delphi-Quellcode:
oder evtl stdcall.... (...BOOL anstelle Boolean könnte auch sein)
function InitSystem: Boolean; cdecl; external 'Hardware.dll' Name 'InitSystem';
|
AW: Mal wieder Delphi vs. C++ DLL
Zitat:
|
AW: Mal wieder Delphi vs. C++ DLL
Hallo,
danke für die Tips. Es hat sich gerade eine Lösung gefunden, aber leider keine Erklärung. In der Delphi Anwendung wurden zuerst ein paar andere Sachen gemacht ( Form Resizing, eine OpenGL Initalisierung, eine Sprachtabelle geladen, einiges was mit GUI zu tun hat ) und dann kam erst der DLL Aufruf. Hab den jetzt an den Anfang gepackt und plötzlich gehts auch auf dem Problem PCs. Wie gesagt, eine Lösung aber keine Erklärung... |
AW: Mal wieder Delphi vs. C++ DLL
Vielleicht wird in einen der Schritte was gefummelt, was Einfluss auf den Code in der DLL hat?
Gerade bei OpenGL werde ich hellhörig, da hier gerne per SetExceptionMask und Set8087CW Prozessweite Änderungen vorgenommen werden. ![]() ![]() ![]() |
AW: Mal wieder Delphi vs. C++ DLL
Also Boolean ist auf jeden Fall verkehrt. Da sollte ein Typ angegeben werden, der genau definiert wie viel Byte er belegt.
Wie ist den der Rückgabewert im Orginal deklariert? |
AW: Mal wieder Delphi vs. C++ DLL
Boolean (Delphi) = 0 / 1 aka $01
BOOL (LongBool) = 0 / -1 aka $FFFFFFFF bool (ByteBool) = 0 / -1 aka $FF 1 und -1 = die Konstanten die Auswertung ist überall <>0 Und schon sieht man auch, warum z.B. Boolean bei einem LongBool mit $00120000 ein False liefert, obwohl es eigentlich True wäre. Aber manchmal wird fataler Weise auch "direkt" mit der Konstante verglichen und dann trifft das True nur genau diesen einen Wert, anstatt auch alle Anderen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:44 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 by Thomas Breitkreuz