Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Mal wieder Delphi vs. C++ DLL (https://www.delphipraxis.net/209792-mal-wieder-delphi-vs-c-dll.html)

calibra301 23. Jan 2022 09:49

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 ?

KodeZwerg 23. Jan 2022 10:07

AW: Mal wieder Delphi vs. C++ DLL
 
Zitat:

Zitat von calibra301 (Beitrag 1501060)
function InitSystem:Boolean;cdecl; external 'Hardware.dll';

Müsste es nicht so lauten:
Delphi-Quellcode:
function InitSystem: Boolean; cdecl; external 'Hardware.dll' Name 'InitSystem';
oder evtl stdcall.... (...BOOL anstelle Boolean könnte auch sein)

peterbelow 23. Jan 2022 10:20

AW: Mal wieder Delphi vs. C++ DLL
 
Zitat:

Zitat von calibra301 (Beitrag 1501060)
Deklaration in Delphi:
function InitSystem:Boolean;cdecl; external 'Hardware.dll';

Hat vermutlich keine Relevanz für das Problem, aber Boolean ist ein Delphi-Typ ohne direktes Analogon in C/C++. Verwende lieber BOOL.

calibra301 23. Jan 2022 10:37

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...

TiGü 24. Jan 2022 10:20

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.

https://docwiki.embarcadero.com/Libr...stem.Set8087CW
https://docwiki.embarcadero.com/Libr...tExceptionMask
https://docwiki.embarcadero.com/RADS...ntrol_Routines

Blup 28. Jan 2022 01:40

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?

himitsu 28. Jan 2022 09:39

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 09:59 Uhr.

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