Seite 1 von 1

Merkwürdiger Fehler bei DLL Kompilierung

Verfasst: 29.09.2004 22:30
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 :)

Verfasst: 30.09.2004 11:15
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
?

Verfasst: 30.09.2004 16:03
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

Verfasst: 30.09.2004 16:46
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

Verfasst: 30.09.2004 16:51
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

Verfasst: 30.09.2004 22:51
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

Verfasst: 01.10.2004 01:31
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

Verfasst: 01.10.2004 09:01
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

Verfasst: 01.10.2004 10:41
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

Verfasst: 01.10.2004 14:44
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