Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   JwaUnits unter FPC (https://www.delphipraxis.net/95856-jwaunits-unter-fpc.html)

Dezipaitor 14. Jul 2007 12:54


JwaUnits unter FPC
 
hi
hat jemand schonmal die jwaXXX Units unter FreePascal getestet? (DelphiSyntax)
Wenn ich jwaWinBase einbinde und das Programm starte, dann bekomme ich den Fehler 313:
Zitat:

---------------------------
mytest1.exe - Einsprungpunkt nicht gefunden
---------------------------
Der Prozedureinsprungpunkt "InterlockedCompareExchange64" wurde in der DLL "kernel32.dll" nicht gefunden.
---------------------------
OK
---------------------------
Delphi-Quellcode:
program MyTest1;
uses jwaWinType,
     jwaNTStatus,
     jwaWinNT,
     jwaWinBase; //fehler

BEGIN
  writeln('test');
END.
Was kann man da tun?

thx

jbg 14. Jul 2007 14:45

Re: JwaUnits unter FPC
 
Zitat:

Zitat von Dezipaitor
Was kann man da tun?

Nicht für 64Bit kompilieren oder ein 64Bit Windows installieren?

Dezipaitor 15. Jul 2007 23:10

Re: JwaUnits unter FPC
 
FCP kann im Moment noch kein 64bit Code erzeugen (zumindest nicht die stable).
Aber es ist auch keine 64bit Variante.

Das Problem liegt aber darin, dass FPC nicht dynamisch linken kann und die Funktionen daher nicht gefunden werden.
die jwa units kann man jedoch auch statisch linken. Jedoch habe ich danach, dasselbe Problem
mit NtCreateChannel. Die werden jedoch immer mit extern 'ntdll.dll' gelinkt.

Ein Fall für Olli - wo bist du ;-)

Dezipaitor 16. Jul 2007 12:36

Re: JwaUnits unter FPC
 
*push*

Luckie 16. Jul 2007 12:37

Re: JwaUnits unter FPC
 
Ich habs gesehen. :warn: Das waren erst 13 Stunden ud 26 Minuten. :mrgreen:

Bernhard Geyer 16. Jul 2007 12:42

Re: JwaUnits unter FPC
 
Schon mal in der MSDN nachgeschaut welche Windows-Version du mindestens benötigst? :gruebel: Und da FPC nicht dynamisch linken kann sollte dir die Konsequenz klar sein.

5 Sekunden Google-Suche hilft manchmal :???:

Dezipaitor 16. Jul 2007 12:43

Re: JwaUnits unter FPC
 
Zitat:

Zitat von Luckie
Ich habs gesehen. :warn: Das waren erst 13 Stunden ud 26 Minuten. :mrgreen:

Gibt es da eine 24h Untergrenze?

Mhh, ich muss wohl Oliver da mal aufn Keks gehen.

Dezipaitor 16. Jul 2007 13:00

Re: JwaUnits unter FPC
 
Zitat:

Zitat von Bernhard Geyer
Schon mal in der MSDN nachgeschaut welche Windows-Version du mindestens benötigst? :gruebel: Und da FPC nicht dynamisch linken kann sollte dir die Konsequenz klar sein.

5 Sekunden Google-Suche hilft manchmal :???:

Moooment. Die gleiche Units werden unter allen Delphiversionen ohne Probleme gestartet. Die jwaUnits laden die Funktionen
auch nur dann, wenn sie vorhanden sind.

OMG.
Wenn FPC nur statisch laden kann, dann würde es bedeuten, dass FPC die jwaUnits nicht verwenden kann?


Ich schau weiter nach.

Bernhard Geyer 16. Jul 2007 13:01

Re: JwaUnits unter FPC
 
Zitat:

Zitat von Dezipaitor
Wenn FPC nur statisch laden kann, dann würde es bedeuten, dass FPC die jwaUnits nicht verwenden kann?

"Einfach" nur die Funktionen rausschmeißen (löschen) welche bei deiner Mindest-Windows-Version nicht vorhanden sind.

Robert Marquardt 16. Jul 2007 13:42

Re: JwaUnits unter FPC
 
FPC verwendet mehrere Jwa und Jcl Units. Hier duerften wir das uebliche Problem vieler der Konversionen haben. Windows hat das API mit den Versionen erweitert und die Konversion ist fuer eine spaetere Version des APIs. Das gibt uebrigens auch manchmal Probleme zwischen Delphi und aelteren BCB-Versionen. Dort sind naturgemaess aeltere C Header von Microsoft lizensiert und das kann zu Inkompatibilitaeten fuehren (mein SetupApi.pas ist da ein Beispiel).

Dezipaitor 16. Jul 2007 14:40

Re: JwaUnits unter FPC
 
Zitat:

Zitat von Bernhard Geyer
Zitat:

Zitat von Dezipaitor
Wenn FPC nur statisch laden kann, dann würde es bedeuten, dass FPC die jwaUnits nicht verwenden kann?

"Einfach" nur die Funktionen rausschmeißen (löschen) welche bei deiner Mindest-Windows-Version nicht vorhanden sind.

Das Problem liegt einfach darin, dass FPC einfach alle statisch verlinkte Funktionen (procedure myfunc; extern 'xy.dll') in der EXE aufführt, auch wenn diese nie verwendet werden. Delphi nimmt diese nicht mit rein.


Ich habe gesehn, dass Jwa die Funktionen auch dynamisch per GetProcAdress laden kann.
Die Direktive dafür ist "DYNAMIC_LINK".

Leider gibt es noch 3 Fehler in jwaWinBase und jwaWinType:

GetModuleHandle
LoadLibrary
GetProcAddress

Der Compiler meckert, dass diese Funktionen bereits mit denselben Parametern überladen wurden. Diese Funktionen sind in jwaWinBase und jwaWinType deklariert.
Kommentiert man diese durch {$IFNDEF DYNAMIC_LINK}...{$ENDIF} aus, so lässt es sich kompilieren.


Ich habe nun die Units unter FPC IDE und unter Lazarus kompiliert, wobei ich für Lazarus den neusten FPC verwendet habe.
Unter FPC Compilereinstellungen kann man die Kompilerdirektive DYNAMIC_LINK direkt setzen. Unter Lazarus muss man dazu einen Umweg machen,
da die Programmierer die direkte Eingabe für die Kompilerdirektiven in den Einstellungen vergessen haben (zumindest half Suchen nichts).
Also: Menü Projekt -> Compilereinstellungen -> Tab "Andere" -> Edit "Benutzerdefinierte Einstellungen" :
Zitat:

-dDYNAMIC_LINK
.
Mehrere Direktiven müssen jedesmal gesondert angegeben werden:
Zitat:

-dDYNAMIC_LINK -dTEST -dTEST2
Die JwaUnits erfordern kein Delphisyntax.

Robert Marquardt 16. Jul 2007 17:06

Re: JwaUnits unter FPC
 
Wenn die Funktionen in JwaWinType und JwaWinType vorhanden sind, dann sind sie auch in den Originalfiles von Windows. Da ist der C Compiler halt sehr viel nachgiebiger.
Vielleicht starten wir ja eine Wiederbelebung der Jedi-Apilib. Die letzte Aktion ist in die Hose gegangen. Wir wollten ein JwaWindows.pas machen, aber das includen und die IFDEFs dazu haben den Delphi-Compiler ueberfordert.

Dezipaitor 16. Jul 2007 18:01

Re: JwaUnits unter FPC
 
Zitat:

Zitat von Robert Marquardt
Wenn die Funktionen in JwaWinType und JwaWinType vorhanden sind, dann sind sie auch in den Originalfiles von Windows. Da ist der C Compiler halt sehr viel nachgiebiger.

Das verstehe ich nicht. Was hat der erste Satz mit dem zweiten zu tun?

Robert Marquardt 17. Jul 2007 05:12

Re: JwaUnits unter FPC
 
Dem C Compiler ist es weitgehend schnurz ob er eine Funktionsdeklaration einmal oder mehrmals bekommt. Solche Doppeldeklarationen kommen also gelegentlich vor. Winbase.h und WinType.h sind sowieso nicht wirklich eigenstaendig. Man benutzt sie durch windows.h. Delphi hat aber etwas gegen solche Doppeldeklarationen. Da ist die Sprache halt anders.


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:59 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