DLL und Static = ASM-Error

Hier werden, insbesondere in den Beta-Phasen, Bugmeldungen gepostet. Das offizielle BugForum ist allerdings hier.
Benutzeravatar
Josef Sniatecki
Beiträge: 657
Registriert: 02.06.2008 21:29
Kontaktdaten:

DLL und Static = ASM-Error

Beitrag 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. :cry:
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
Zuletzt geändert von Josef Sniatecki am 26.03.2010 11:46, insgesamt 1-mal geändert.
PB 4.61 | Windows Vista - 32Bit
Homepage

"Wahrlich es ist nicht das Wissen, sondern das Lernen, nicht das Besitzen sondern das Erwerben, nicht das Dasein, sondern das Hinkommen, was den grössten Genuss gewährt." - Carl Friedrich Gauß
Benutzeravatar
gekkonier
Beiträge: 314
Registriert: 20.04.2007 09:06
Wohnort: Wien

Re: DLL und Static = ASM-Error

Beitrag von gekkonier »

Mach den String Global in DLL Quelltext.
Benutzeravatar
Josef Sniatecki
Beiträge: 657
Registriert: 02.06.2008 21:29
Kontaktdaten:

Re: DLL und Static = ASM-Error

Beitrag 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. :wink:

Ändert aber alles nichts daran, dass dies offensichtlich ein Bug ist.
PB 4.61 | Windows Vista - 32Bit
Homepage

"Wahrlich es ist nicht das Wissen, sondern das Lernen, nicht das Besitzen sondern das Erwerben, nicht das Dasein, sondern das Hinkommen, was den grössten Genuss gewährt." - Carl Friedrich Gauß
Little John

Re: DLL und Static = ASM-Error

Beitrag 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
Benutzeravatar
bobobo
jaAdmin
Beiträge: 3873
Registriert: 13.09.2004 17:48
Kontaktdaten:

Re: DLL und Static = ASM-Error

Beitrag 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 .. 8) )
‮pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Benutzeravatar
helpy
Beiträge: 636
Registriert: 29.08.2004 13:29

Re: DLL und Static = ASM-Error

Beitrag 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 ;-)
Windows 10
PB Last Final / (Sometimes testing Beta versions)
Benutzeravatar
bobobo
jaAdmin
Beiträge: 3873
Registriert: 13.09.2004 17:48
Kontaktdaten:

Re: DLL und Static = ASM-Error

Beitrag 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 :D )

Ist aber auch alles schnurzpiepegal eigentlich und an sich gar nicht mein Problem.
‮pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Benutzeravatar
helpy
Beiträge: 636
Registriert: 29.08.2004 13:29

Re: DLL und Static = ASM-Error

Beitrag 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 :-D ... aus denen kann ich dann auch noch lernen!
Windows 10
PB Last Final / (Sometimes testing Beta versions)
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: DLL und Static = ASM-Error

Beitrag von ts-soft »

Ich verstehe hier ja garnichts mehr :mrgreen:
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
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
bobobo
jaAdmin
Beiträge: 3873
Registriert: 13.09.2004 17:48
Kontaktdaten:

Re: DLL und Static = ASM-Error

Beitrag 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. 8)
‮pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Antworten