_PB_StringBasePosition bei Thread-sicherem Exe

Anfängerfragen zum Programmieren mit PureBasic.
marco2007
Beiträge: 906
Registriert: 26.10.2006 13:19
Kontaktdaten:

_PB_StringBasePosition bei Thread-sicherem Exe

Beitrag von marco2007 »

Hi,

ich habe ein Programm mit einem Thread. Sobald ich "Thread-sicheres Exe erstellen" anklicke, bekomme ich folgenden Fehler:

---------------------------
PureBasic - Linker error
---------------------------
POLINK: error: Unresolved external symbol '_PB_StringBasePosition'.

POLINK: fatal error: 1 unresolved external(s).


---------------------------
OK
---------------------------


Thread-Aufruf:

Code: Alles auswählen

CreateThread(@sapdaten(), 100)



Thread:

Code: Alles auswählen

Procedure SAPdaten(wert)
anzahlsap=0
db = OpenDatabase(#db, "MyBack", "", "") 
  If db
    If DatabaseQuery(#db, "select * from Angebot")
       FirstDatabaseRow(#db)
       anzahlsap+1
      While NextDatabaseRow(#db)<>0
        anzahlsap+1
      Wend  
    Else
       MessageRequester("SQL-Fehler", DatabaseError())
    EndIf   
  Else
      MessageRequester("SQL-Fehler", DatabaseError())
   CloseDatabase(#db)   
  EndIf
  
    If oldanzahlsap<anzahlsap
      diffsap.s=Str(anzahlsap-oldanzahlsap)
      oldanzahlsap=anzahlsap 
      StatusBarText(#statusbar, 4, "Anzahl Belege: "+Str(Anzahlsap))
      PlaySound(0)
      Delay(5000)
      ;MessageBeep(#MB_ICONEXCLAMATION)
    EndIf
EndProcedure


Das blöde an der Geschichte: Code alleine funkt... nur beim kompletten Programm nicht. Das Programm hat aber über 5000 Zeilen.

Hat zufällig jemand eine Ahnung, auf was sich _PB_StringBasePosition beziehen könnte?

Danke
Marco
Zuletzt geändert von marco2007 am 09.02.2008 19:05, insgesamt 1-mal geändert.
Windows 11 - PB 6.03 x64
_________________________________
Benutzeravatar
HeX0R
Beiträge: 3042
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3
Kontaktdaten:

Beitrag von HeX0R »

Das kommt von einer Userlib die du benutzt.
marco2007
Beiträge: 906
Registriert: 26.10.2006 13:19
Kontaktdaten:

Beitrag von marco2007 »

Wow! Du hast recht! Sobald ich Getdefaultprinter() von PBOSL im Programm verwende, kommt die Fehlermeldung! Es ist übrigens egal, ob in der Prozedur oder außerhalb!

Code: Alles auswählen

Procedure SAPdaten(wert)
Debug "ok"
Getdefaultprinter() 
EndProcedure


CreateThread(@sapdaten(), 100)

MessageRequester("Info", "It will display an alert every 3 seconds."+Chr(10)+"Click To finish the program", 0)
Danke
Marco

PS: Muss jetzt einen guten Ersatz für Getdefaultprinter suchen und ich hoffe, daß dies das einzige Problem war!


MIST: Da gibt`s noch mehr....Ich habe den nächsten Schuldigen -> Esgrid!

Hm, UserLibThreadSafe bei Subsystem bewirkt ja Wunder :oops:
Windows 11 - PB 6.03 x64
_________________________________
Benutzeravatar
Kurzer
Beiträge: 1617
Registriert: 25.04.2006 17:29
Wohnort: Nähe Hamburg

Beitrag von Kurzer »

Ganz genau über dem selben Sch*** habe ich auch gerade gebrütet.

Wieso muß man in den Compileroptionen noch "UserLibThreadSafe" eintragen, wenn es doch den Klicker Threadsicheres Executable erzeugen gibt?

Die Hilfe schreibt dazu:
Threadsicheres Executable erstellen
Diese Option teilt dem Compiler mit, dass er eine spezielle Version von bestimmten Befehlen verwenden soll, um diese sicher zur Verwendung in Threads zu machen. Siehe die Thread Library für weitere Informationen.
Ich habe an anderer Stelle schon mal über eigene Wissenslücken aber auch über Lücken in der Hilfe gemosert und das hier zeigt mir einmal mehr, daß das PureBasic-Paket noch nicht 100% "Beginnerscompatible" ist.
Okay, das hat auch keiner behauptet, aber man kann ja darauf hin arbeiten.

Es steht nirgendwo erwähnt, daß man dort manuell "UserLibThreadSafe" eintragen muß, damit Threadsichere UserLibs letzendlich auch benutzt werden. Jedenfalls habe ich bisher nichts dazu in der Hilfe gefunden. Ich ging davon aus, daß eine Userlib, die u.a. im Verzeichnis "UserLibThreadSafe" installiert ist, von PB benutzt wird.

Sowas nervt mich echt an. :evil:

Für Infos dieser Art muß man vermutlich zum elitär Dunstkreis von Fred gehören oder als langjähriger Forengreis sämtliche Beitrage seit PB V. 1.0 auswendig kennen. *hmpf*

Sorry, das musste jetzt mal raus. :freak:

[Edit]
PS: Ebenso das Feld "Linker-Optionen-Datei". Da bin ich letztens auch nur zufällig über einen interessanten Eintrag gestolpert - und habe gelernt, daß PB den linker von Pelles C benutzt.

Ja Hallo? Was steht darüber in der Hilfe?
Linker-Optionen Datei
Hier kann eine Text-Datei definiert werden mit weiteren Kommandozeilen-Optionen, welche beim Erstellen des Executable an den Linker übergeben werden sollen. Die Datei sollte eine Option pro Zeile enthalten.
Das ist alles. Da kann man das auch gleich weglassen.

Aber vielleicht wird einfach nur davon ausgegangen, daß der geneigte PB Programmierer immer auch begnadeter C-Programmierer ist und mit Linkern, Objectdateien etc. vertraut ist. Aber die Optionensyntax für so einen C-Linker wird vermutlich nicht standardisiert sein.
Ergo: Ohne zu wissen wie die genaue Syntax lautet ist das Feld für die Linker-Optionendatei irgendwie überflüssig.
Zuletzt geändert von Kurzer am 06.08.2009 23:04, insgesamt 1-mal geändert.
"Never run a changing system!" | "Unterhalten sich zwei Alleinunterhalter... Paradox, oder?"
PB 6.12 x64, OS: Win 11 24H2 x64, Desktopscaling: 150%, CPU: I7 12700 H, RAM: 32 GB, GPU: Intel(R) Iris(R) Xe Graphics | NVIDIA GeForce RTX 3070
Useralter in 2025: 57 Jahre.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

> daß das PureBasic-Paket noch nicht 100% "Beginnerscompatible" ist.

"Beginner" sollen sich auch nicht mit Threads rumschlagen. :mrgreen:

mal davon ab, dass bei Userlibs sowieso gilt "auf eigene Gefahr".


... aber ok, das sieht schon ein bissel nach einer Diskrepanz aus.
hast du das denn zumindest in dem Topic zur Help-Verbesserung gemeldet?
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Kurzer
Beiträge: 1617
Registriert: 25.04.2006 17:29
Wohnort: Nähe Hamburg

Beitrag von Kurzer »

Nö hab ich nicht, aber sollte ich wohl mal machen.. meinem Puls zuliebe ;)
Edit: *done*

PS: Trotz "isch hab Puls" war das als konstruktive Kritik angedacht. ;)
"Never run a changing system!" | "Unterhalten sich zwei Alleinunterhalter... Paradox, oder?"
PB 6.12 x64, OS: Win 11 24H2 x64, Desktopscaling: 150%, CPU: I7 12700 H, RAM: 32 GB, GPU: Intel(R) Iris(R) Xe Graphics | NVIDIA GeForce RTX 3070
Useralter in 2025: 57 Jahre.
freak
PureBasic Team
Beiträge: 766
Registriert: 29.08.2004 00:20
Wohnort: Stuttgart

Beitrag von freak »

Wunderbar. Da kommt einer mit ein paar userlibs nicht klar, und sofort ist wieder PB daran schuld :roll:

Um das mal klar zu stellen:
Keine der originalen PB libraries braucht diesen "UserLibThreadSafe"-Schwachsinn. Das Problem haben nur Tailbite-Libraries, und der einzige Grund dafür ist der das die Tailbite-Maintainer/Entwickler anscheinend zu faul sind die Unicode/Threadsafe-Optionen von PB ordentlich umzusetzen. Die Möglichkeiten dazu sind nämlich durchaus vorhanden. Wenn du also Frust ablassen willst dann ist das die richtige Adresse.

Postings wie dieses gehen mir echt tierisch auf den Sack :evil:
Benutzeravatar
Kurzer
Beiträge: 1617
Registriert: 25.04.2006 17:29
Wohnort: Nähe Hamburg

Beitrag von Kurzer »

freak hat geschrieben:...der einzige Grund dafür ist der das die Tailbite-Maintainer/Entwickler anscheinend zu faul sind die Unicode/Threadsafe-Optionen von PB ordentlich umzusetzen. Die Möglichkeiten dazu sind nämlich durchaus vorhanden. Wenn du also Frust ablassen willst dann ist das die richtige Adresse.
Okay jetzt weiß ich das auch. Danke für den Hinweis.
freak hat geschrieben:Postings wie dieses gehen mir echt tierisch auf den Sack :evil:
Tut mir Leid, wenn ich Dich damit genervt haben sollte, war nicht meine Absicht. Aber es ist doch offensichtlich, daß es hier noch Informationslücken zu geben scheint.
Aus der resultierenden Fehlermeldung kann man nicht zwingend auf die Tailbite-Problematik schließen (sofern man "Tailbite-Libs" als solche überhaupt kennt).

(An dieser Stelle dann mal der Hinweis an Gnozal... denn ich nutze lediglich die PureColor und PureResize Libs)
"Never run a changing system!" | "Unterhalten sich zwei Alleinunterhalter... Paradox, oder?"
PB 6.12 x64, OS: Win 11 24H2 x64, Desktopscaling: 150%, CPU: I7 12700 H, RAM: 32 GB, GPU: Intel(R) Iris(R) Xe Graphics | NVIDIA GeForce RTX 3070
Useralter in 2025: 57 Jahre.
Little John

Beitrag von Little John »

Kurzer hat geschrieben:Aus der resultierenden Fehlermeldung kann man nicht zwingend auf die Tailbite-Problematik schließen (sofern man "Tailbite-Libs" als solche überhaupt kennt).
Sehe ich auch so. Könnte PureBasic vielleicht die UserLibs vor dem Einbinden in ein Programm strenger prüfen, und zurückweisen wenn sie nicht 100% OK sind? Fehlermelding in diesem Fall etwa: "Es soll ein thread-sicheres Executable erstellt werden, aber Userlib xyz ist nicht threadsafe." Wenn sowas möglich ist, wäre das für den Endbenutzer schon besser.

Gruß, Little John
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

besser wäre es vielleicht, aber lohnt sich der Aufwand?

wir sind Programmierer, und wenn wir Fremd-Libraries benutzen, müssen wir wissen was wir tun.
Wer eine Umgebung will, die ihm das Denken abnimmt, sollte vielleicht eines der fetten MicroSoft-Pakete kaufen,
die überladen sind und womöglich auch noch deinen Code ausspähen.

Wenn man Fehlermeldungen bekommt, die einen nicht mit der Nase aufs Problem stoßen und
vielleicht etwas kryptisch sind, darf man den Göttern des Digitalen Pantheon danken,
dass man sich nicht die Platte festgefahren hat oder den Bus überlastet.
im Vergleich zu früheren Dekaden bekommen wir von unseren heutigen Compilern geradezu den Po gepudert.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Antworten