Merkwürdiger Fehler bei DLL Kompilierung

Für allgemeine Fragen zur Programmierung mit PureBasic.
ShadowTurtle
Beiträge: 114
Registriert: 11.09.2004 07:58
Wohnort: Mannheim
Kontaktdaten:

Merkwürdiger Fehler bei DLL Kompilierung

Beitrag von ShadowTurtle »

Guten Abend,

ich habe ein Problem. Wenn ich in meinen Editor eine EXE erstelle dann Funktioniert alles Prima. So bald ich aber eine DLL mache dann Funktioniert sie nicht.

Wenn ich die DLL von meinen Editor vergleiche und den des Originalen Purebasic Editor, dann bemerke ich einen 50 Bytes unterschied.

Habe im Purebasic Editor Quellcode gesehen das da so eine compilation.msg vor dem Kompilieren erstellt wird. Danach natürlich auch wieder gelöscht.

Ist diese "compilation.msg" wirklich von nöten was DLLs anbelangt? Immerhin habe ich den einsatz dieser Datei nur in Purebasic Editor gesehen. Wobei ich mir da Denke das man auch Globale Variablen hätte nehmen können.

Achja. Sachen wie /DLL habe ich nicht vergessen. Keine sorge. *g*

Eurer (um Rat flehender), ShadowTurtle.

PS. Schönes Forum Design. Ist mal was anderes als nur Subsilver :)
Benutzeravatar
Rings
Beiträge: 977
Registriert: 29.08.2004 08:48

Beitrag von Rings »

ein paar anmerkungen wenn man DLL's machen will:

1) Kein Code ausserhalb von Proceduren

2) Keine globalen Arrays und Linkedlist.
Wenn Array od. Linkelist, dann innerhalb einer Procedure deklarieren.Funktioniert dann trotzdem global .Diese Procedure halt am Anfang einmal aufrufen (Oder Attach nehmen)

3) OnError geht in version 3.91 nicht mit DLL's (Fehler ist schon behoben, wird sicherlich irgendwann ein update geben)

ausserdem, was geht denn icht bei deinen DLL's
?
Rings hat geschrieben:ziert sich nich beim zitieren
ShadowTurtle
Beiträge: 114
Registriert: 11.09.2004 07:58
Wohnort: Mannheim
Kontaktdaten:

Beitrag von ShadowTurtle »

Das problem ist ja das alles mit der Originalen Purebasic IDE (neueste version) alles Prima funktioniert. Nur halt nicht wenn ich den Kompiler selbst über die Konsole (MS-DOS eingabeaufforderung) aufrufe.

Hab da mal zwei sachen:
1. Komplett Kompiliert mit der Normale Purebasic IDE: Download.
2. Komplett Kompiliert mit dem Kompiler über die Konsole: Download.

Letzteres weist klare Fehler und größeunterschied in der DLL auf. Woran liegt das?

Bei beidem habe ich nicht mit OnError oder sonst was Kompiliert. Sondern halt ganz Normal.

cu
Benutzeravatar
Rings
Beiträge: 977
Registriert: 29.08.2004 08:48

Beitrag von Rings »

ich hab dein example mal ins compilers verzeichnis kopiert, kompiliert mit

Pbcompiler sampledll.pb /DLL

dann die Purebasic.dll umbenannt in
Sampledll.dll

und das ganze geht, kompiliert 5120 bytes groß

Purebasic 3.91, Fasm 1.55
Rings hat geschrieben:ziert sich nich beim zitieren
ShadowTurtle
Beiträge: 114
Registriert: 11.09.2004 07:58
Wohnort: Mannheim
Kontaktdaten:

Beitrag von ShadowTurtle »

Bei Win98 kommt der Fehler. Bei WindowsXP läuft bei mir auch halbwegs alles. bzw. Es kommt zwar kein Fehler, läuft aber auch nicht.

Da muss der Fehler dann wohl bei mir liegen. Trotzdem wären hinweise, was alles zu Fehler führen könnte, nicht schlecht.

Edit: Ehm moment mal. Wo führst du die pbcompiler.exe aus? Ich gebe zunächst den Pfad zu Purebasic/Compiler an und dann die pbcompiler.exe.

Ein beispiel: C:\Purebasic\compilers\pbcompiler.exe c:\purebasic\samples\...\dllsample.pb /dll

Dabei gehe ich in den Pfad des Kompilers. Das sehe ich bei deinen Beispiel nicht. Macht das wirklich einen großen unterschied?

cu
Benutzeravatar
Falko
Admin
Beiträge: 3535
Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit)
Kontaktdaten:

Beitrag von Falko »

Ich habs mal mit einer Batdatei unter XP probiert und der Code funktioniert auch. Erzeuge doch mal mit folgenden Zeilen eine MakeDLL.BAT und kopiere diese mal in das Verzeichnis deines DLL-Source bzw. kopiere die MakeDLL.BAT zusammen mit der quelltext.pb in einem eigenen Ordner auf deinem Desktop.

MakeDLL.bat

Code: Alles auswählen

path = C:\PureBasic\Compilers
pbcompiler quelltext.pb /DLL
copy C:\Purebasic\Compilers\PureBasic.dll
ren PureBasic.dll sampledll.dll
MfG Falko
Bild
Win11 Pro 64-Bit, PB_6.11b1
ShadowTurtle
Beiträge: 114
Registriert: 11.09.2004 07:58
Wohnort: Mannheim
Kontaktdaten:

Beitrag von ShadowTurtle »

Das verdutzt mich nun schon wieder. Per Editor erstelle ich einen Kommandozeilen-Thread, und mit dessen Hilfe Kompiliere ich.

Per richtige Kommandozeile scheint es zu Funktionieren. Dabei ist das alles doch Haargenau Identisch. Selbst nach kleinere überprüfungen (um fehler zu finden) haben nichts gebracht.

Anscheinent heißt da mal das Motto wieder: Der Fehler liegt meistens dort wo man es am wenigsten vermutet.

Da kann ich mir wohl nur noch selbst Helfen. Trotzdem Danke an allen die versucht haben mir zu Helfen. Ihr seit Spitze!

Edit: Achja. Wegen der Allround-Windows Kompatibelität habe ich etwas besonderes gemacht. Eigentlich genau das selbe wie z.B. der Borland C++ Builder.

Ich benutze zwar Threads, aber da sich diese nur über einen unterthread richtig beenden lassen (vorallem bei win98 *g*) benutze ich so eine art Hintergrund Kompiler. Also eine eigene Anwendung die den Kompiler aufruft.

Das Beenden der Kompilierung erkenne ich, wenn die DLL oder die EXE Existiert. Ich versuche es nun mit einen Timer, wobei ich kaum hoffnung habe das es dann richtig Funktioniert. Immerhin Funktionieren alle EXE Files perfekt.

cu
ShadowTurtle
Beiträge: 114
Registriert: 11.09.2004 07:58
Wohnort: Mannheim
Kontaktdaten:

Beitrag von ShadowTurtle »

Obwohl ich nun das erkennen des Beenden des Kompilierens Korrigiert habe: Es ging trotzdem nicht.

Genau, "ging". Denn es geht jetzt. Habe endlich den Blöden fehler gefunden. /:->

Wenn man in der Kommandozeile auch /DynamicCPU angibt, dann gehts nicht. Nun die Frage: Wieso!? :roll:

Sorry für Doppelpost, aber das Interessiert mich nun mal wirklich. Aber an den ganzen Bugs kann man ganz gut erkennen das man in Purebasic wirklich mehr zugriff hat als wie in manch einer andere Programmiersprache. Vieleicht kann man sich sogar ein paar Bugs zu nutzen machen.

cu
Benutzeravatar
helpy
Beiträge: 636
Registriert: 29.08.2004 13:29

Beitrag von helpy »

Falko hat geschrieben:MakeDLL.bat

Code: Alles auswählen

path = C:\PureBasic\Compilers
pbcompiler quelltext.pb /DLL
copy C:\Purebasic\Compilers\PureBasic.dll
ren PureBasic.dll sampledll.dll

Code: Alles auswählen

:: Pfad zum Compiler-Verzeichnis in 
:: Environment-Variable speichern
set PBCompiler=C:\PureBasic\Compilers

:: Compiler aufrufen
%PBCompiler%\PBCompiler.exe quelltext.pb /DLL

:: Erzeugte DLL in eigenes Verzeichnis verschieben
:: /Y verhindert das Nachfragen, wenn schon eine
:: sampledll.dll existiert
move /Y %PBCompiler%\PureBasic.dll sampledll.dll
So brauchst Du in der Batch-Datei den Pfad zum Compiler nur einmal angeben und Du musst die PATH Variable nicht verändern, die ja noch weitere Pfade zu anderen Programmen enthält. Wenn Du PATH änderst dann besser so:

Code: Alles auswählen

set PATH=%PATH%;C:\Purebasic\Compilers\
cu, helpy
Benutzeravatar
Falko
Admin
Beiträge: 3535
Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit)
Kontaktdaten:

Beitrag von Falko »

@helpy
interessanter Tip. Hatte das mal nur so auf die Schnelle ausprobiert und
über kürzungen etc. gar nicht darüber nachgedacht. Aber Danke, kann ich
gut gebrauchen. :D

MfG Falko
Bild
Win11 Pro 64-Bit, PB_6.11b1
Antworten