Seite 1 von 2
DLL und Static = ASM-Error
Verfasst: 26.03.2010 11:26
von Josef Sniatecki
Hallo,
Habe mal wieder ein Projekt begonnen, das zum größten Teil mit DLLs arbeitet... nun bin ich darüber gestoßen:
Code: Alles auswählen
ProcedureDLL.i Test()
Static Foo.s
Foo = "Bar"
EndProcedure
Als
DLL kompilieren und schwupp, da meint der Compiler, dass "Foo" nicht definiert sei.
Das Selbe passiert auch mit allen anderen Datentypen.
Könnt ihr dies bestätigen?
Könnte sein, dass dies schon irgendwo im englischen Forum gepostet wurde. Würde mich nämlich
wirklich verwundern, wenn bisher noch niemand über diesen Fehler gestolpert ist.
Gruß Josef
Version: PB 4.41 (x86) - Windows
Re: DLL und Static = ASM-Error
Verfasst: 26.03.2010 11:41
von gekkonier
Mach den String Global in DLL Quelltext.
Re: DLL und Static = ASM-Error
Verfasst: 26.03.2010 11:45
von Josef Sniatecki
Jo, ist ein Umweg. Aber was wenn ich mehrere Prozeduren habe und in jeder eine statische Variable mit dem selben Namen definieren möchte? Klar, ich kann dann mehrere globale Variablen definieren und diese jeweils mit einem anderen Präfix versehen. Schön ist das aber nicht.
Ändert aber alles nichts daran, dass dies offensichtlich ein Bug ist.
Re: DLL und Static = ASM-Error
Verfasst: 26.03.2010 12:06
von Little John
Josef Sniatecki hat geschrieben:Könnt ihr dies bestätigen?
Könnte sein, dass dies schon irgendwo im englischen Forum gepostet wurde.
Fred hat's jedenfalls bestätigt (
Matthäus 7, Vers 7)
Gruß, Little John
Re: DLL und Static = ASM-Error
Verfasst: 26.03.2010 12:18
von bobobo
BUG ??? Ich glaub ja eigentlich eher nicht.
STATIC definierte Variablen sollen einen Wert erhalten, der der Variablen ja irgendwie auch
außerhalb der Procedur bzw. für die spätere Verwendung bei erneutem ProcedureAufruf
erhalten bleiben soll. Und sowas geht halt nur, wenn die Variable GLOBAL definiert wird
(siehe auch PB_Hilfe 'Erstellen einer DLL', such nach 'DLL' in der Hilfe) etwas weiter unten
und auch dort eher aus dem Kontext zu ergründen)
Andere (siehe PBOSL) benutzen in solchem Fall
Protected (Für echte lokale Vars
die auch global existieren) innerhalb der ProcedureDll oder deklarieren eben gleich
Global,wenn es drauf ankommt den Wert zu erhalten (aber wohl auch schonmal
einfach so weil es geht ..

)
Re: DLL und Static = ASM-Error
Verfasst: 26.03.2010 15:35
von helpy
bobobo hat geschrieben:BUG ??? Ich glaub ja eigentlich eher nicht.
STATIC definierte Variablen sollen einen Wert erhalten, der der Variablen ja irgendwie auch
außerhalb der Procedur bzw. für die spätere Verwendung bei erneutem ProcedureAufruf
erhalten bleiben soll. ...
Siehe:
http://www.purebasic.com/german/documen ... tatic.html :
Static ermöglicht das Deklarieren einer lokalen (statischen) Variable, die ihren Wert behält, in einer Prozedur, auch wenn die gleiche Variable im Hauptprogramm bereits als Global deklariert wurde.
...
Der Wert der Variable wird nicht bei jedem Prozedur-Aufruf neu initialisiert (zurückgesetzt). Dies bedeutet, dass Sie lokale Variablen parallel zu globalen Variablen (mit dem gleichen Namen) verwenden können und beide ihre Werte beibehalten. Jeder Variable kann auch sofort ein Standard-Wert zugewiesen werden, dies muss aber ein konstanter Wert sein.
...
Ist doch eindeutig beschrieben

Re: DLL und Static = ASM-Error
Verfasst: 26.03.2010 15:44
von bobobo
ok ..
http://www.purebasic.com/german/documen ... e/dll.html
lies hin
Hinweise zur Rückgabe von Strings aus DLL's:
Bei der Rückgabe von Strings aus einer DLL-Funktion muß der String als Global deklariert sein.
Und das liest sich für mich so, dass eine "STATIC"-Variable eben genauso behandelt werden muss wie eine
die auch außerhalb der ProcedureDLL Gültigkeit haben soll. Und deshalb eben Global oder eben nicht STATIC.
Im Prinzip funktioniert das ja alles auch bestens und prima, nur bei ProcedureDLL klemmt es halt ein wenig.
Für mich bleibt es kein Bug. (Der sitzt ja eh hier vorm Rechner .. schau mal genau hin, bei Dir sitzt auch einer davor

)
Ist aber auch alles schnurzpiepegal eigentlich und an sich gar nicht mein Problem.
Re: DLL und Static = ASM-Error
Verfasst: 26.03.2010 16:40
von helpy
1. Es war bisher nie die Rede davon, dass es sich um einen String handelt, den die DLL-Funktion an das aufrufende Programm zurückgeben soll.
2. Ich kann innerhalb von ProcedureDLL doch Static-Variablen für andere Zwecke verwenden verwenden!
3. Die Beschreibung "Erstellung einer DLL" sagt für mich überhaupt nichts aus über Static-Variablen! Da geht es um die Rückgabe von Strings aus einer DLL.
4. Ich kenne den Bug vor meinem Monitor

... da sitzt nicht nur einer - mache genug Fehler

... aus denen kann ich dann auch noch lernen!
Re: DLL und Static = ASM-Error
Verfasst: 26.03.2010 16:48
von ts-soft
Ich verstehe hier ja garnichts mehr
Bug ist von Fred bestätigt und wird in der nächsten Version bereinigt sein.
Und selbstverständlich eignet sich Static auch für die Rückgabe von Strings
aus Proceduren, der Hilfetext stammt ja noch aus einer Zeit, wo es kein
Static gab.
Gruß
Thomas
Re: DLL und Static = ASM-Error
Verfasst: 26.03.2010 17:14
von bobobo
es geht hier nicht um proceduren sondern um exportierte prozeduren .. ich sach da nix mehr
zu .. ist ja auch nicht mein problem (Bin aber mal gespannt wie dieser angebliche Bug gefixt
wird.)
und nun ... Lasst mich in Ruhe .. ich hab Feierabend.
