ComLib_PB4 mit PB 4.20 (beta 2)

Fragen und Bugreports zur PureBasic 4.0-Beta.
PurePi
Beiträge: 41
Registriert: 08.02.2007 08:18

Beitrag von PurePi »

Du meinst den TagKnecht ?
-> den benutze ich so wie gepostet
Im Hauptprog siehts dann so aus:

SCtr_AddCode(TagKnecht(VollerDateiname,"Read","","","","","",""))
FileTitel.s=SCtr_EvalStr("Titel")
--> VollerDateiname wird zuvor natürlich noch "befüllt".

Btw:
Den TailBite habe ich schon bemüht (ScriptControl neu kompiliert)
-> leider immer noch "Memory access error...." :(

Gruß
Bernd
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

Beitrag von ts-soft »

Vielleicht sollte der NightKnecht doch einen String zurückgeben, der mehr als "" enthält :mrgreen:

Momentan gibt die Procedure nur nen leerstring zurück, leeres Skript macht
im allgemeinen nicht viel
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
Kiffi
Beiträge: 10621
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

PurePi hat geschrieben:Du meinst den TagKnecht ?
was soll ich denn sonst meinen, wenn Du nur diese eine Proc gepostet hast? ;-)
PurePi hat geschrieben:-> den benutze ich so wie gepostet
na, dann haben wir den Fehler ja schon gefunden :lol:

Grüße ... Kiffi

// Edit: In Deinem Ursprungsposting ist es nicht viel besser
PurePi hat geschrieben:

Code: Alles auswählen

Procedure.s MyVBS()
VBS$ + "MyVar =" + Chr(34) +"Hallo"+ Chr(34) + #CRLF$
ProcedureReturn
EndProcedure 
Hygge
PurePi
Beiträge: 41
Registriert: 08.02.2007 08:18

Beitrag von PurePi »

?? Verwirrung ??
Was soll denn aus der Procedure TagKnecht zurückgegeben werden ??(innerhalb der Procedure läuft doch nur VBS ab)
NACH Rückkehr wird doch erst mit z.B "FileTitel.s=SCtr_EvalStr("Titel")"
die VBS Variable einer PB Variablen zugewiesen.
Das ganze geht ja auch wunderbar solange folgende ich SCtr_EvalStr(...) nicht aus einer weiteren Procedure aufrufe (s. mein 1. Posting)
Und wie schon gesagt, mit PB 4.0 liefs bisher ohne Probleme

Bernd
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

Beitrag von ts-soft »

>> Und wie schon gesagt, mit PB 4.0 liefs bisher ohne Probleme
möchte ich mal bezweifeln.

Die Procedure setzt doch das Skript zusammen. Das Ergebnis der Procedure
ist das Skript in einem String, welches dann ausgeführt werden kann. Du
setzt den String zwar zusammen aber er verläßt niemals die Procedure :)
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
Kiffi
Beiträge: 10621
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

ts-soft hat geschrieben:>> Und wie schon gesagt, mit PB 4.0 liefs bisher ohne Probleme
möchte ich mal bezweifeln.
[grübel] ... es sei denn, er hat VBS$ irgendwo global deklariert.
Dann könnte es geklappt haben.

@PurePi: Wie Thomas schon schrieb:

Code: Alles auswählen

 ProcedureReturn VBS$
wäre korrekt.

Grüße ... Kiffi
Hygge
PurePi
Beiträge: 41
Registriert: 08.02.2007 08:18

Beitrag von PurePi »

Ne, Globale Deklaration ist und war nicht.
Um nochmal bei meinen simplem Beispiel zu bleiben:
Dann müßte es ja so laufen:
(tut aber nicht)

Global VBS$
SCtr_SetLanguage("VBScript")
SCtr_SetTimeOut(10000)

Procedure.s MyVBS()
VBS$ + "MyVar =" + Chr(34) +"Hallo"+ Chr(34) + #CRLF$
ProcedureReturn VBS$
EndProcedure

; Nach wie vor: die auskommentierten Zeilen gehen !
; folgende Aufrufe funkt. hier (aus dem Hauptprogramm) einwandfrei
; SCtr_AddCode(MyVBS())
; pbMyVar.s=SCtr_EvalStr("MyVar")

; !! Das geht NICHT (unter 4.20)
Procedure GetMyVar()
SCtr_AddCode(MyVBS())
pbMyVar.s=SCtr_EvalStr("MyVar")
EndProcedure

; Erfolgt der Aufruf aus einer Procedure gibt's "Invalid memory access.(read error at adress 0)"
GetMyVar()
Benutzeravatar
Kiffi
Beiträge: 10621
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

Hallo PurePi,

1.) Das 'Global VBS$' ist da totaler Käse. Am besten weg damit. Die
Funktion MyVBS() musst lediglich VBS$ zurückgeben, dann ist alles in
Butter.

2.) Es ist nicht auszuschliessen, dass die ScriptControl-Lib -- so wie sie ist --
nicht mehr korrekt unter PB4.2x läuft. Solange Du (oder sonstwer) sie
nicht neu kompiliert, ist es müßig, nach vermeintlichen Fehlern zu suchen.

3.) Was spricht dagegen, den PureDispHelper zu verwenden? Das von
Thomas gepostete Beispiel
funktioniert doch.

4.) Bitte Code-Tags verwenden (und nicht immer den Code grün einfärben)

Grüße ... Kiffi
Hygge
PurePi
Beiträge: 41
Registriert: 08.02.2007 08:18

Beitrag von PurePi »

Moin Kiffi,

besten Dank für deine Infos.
'Global VBS$'...
ist schon klar das es überflüssig wie`n Kropf ist, wollte nur zeigen dass es mit "Global" genausowenig geht.
..Solange Du (oder sonstwer) sie nicht neu kompiliert,...
Unter 4.20 neu kompiliert hatte ich bereits (mit neuester TailBilte), hatte ich weiter oben auch schon mal gepostet.
Das neu kompilieren hat aber nicht geholfen
Aber ich glaube schon, das die Memoryverwaltung (oder was auch immer) in 4.20 anders ist. Wie bereits gepostet: die ReadFunctions der JHRegistry_420 LIB (wie der Name sagt - für 4.20) haben selbiges Problem
... das von Thomas gepostete Beispiel...
jo, das geht gut.
Leider kriege es nicht hin, diese entsprechend umzubauen :cry:
Ich poste mal meinen Versuch, evtl. kann mir ja mal jemand Hilfe geben:
Es ist für mich unklar, was innerhalb der Procedure GetTag abzulaufen hat, und was hinterher mit dhGetValue() "abzugreifen" ist.

Grüsse
Bernd

Code: Alles auswählen

EnableExplicit 

Procedure.s GetTags(File$) 

  Protected Script$ 

	; Object klar machen
	Script$ = "Set oWMP = CreateObject(" + Chr(34) + "wmPlayer.ocx" + Chr(34) + ") " + #CRLF$
	Script$ + "Set oMedia = oWMP.newMedia("+Chr(34)+File$+ Chr(34)+")" + #CRLF$
	
	;Read
	;Script$ + "Bitrate=oMedia.GetIteminfo(" + Chr(34) + "Bitrate"+ Chr(34) + ") " + #CRLF$
	
  ProcedureReturn Script$ 

EndProcedure 

dhToggleExceptions(#True) 

Define.l Result, obj = dhCreateObject("MSScriptControl.ScriptControl") 
Define.s Script 

If obj 

  dhPutValue(obj, "Language = %T", @"VBScript") 
  dhGetValue("%T", @Result, obj, "Language") 

  If Result 

    Debug "Language: " + PeekS(Result) 
    dhFreeString(Result) : Result = 0 

  EndIf 

  dhPutValue(obj, "TimeOut = %d", 20000) 
  dhGetValue("%d", @Result, obj, "TimeOut") 

  Debug "TimeOut: " + Str(Result) + " ms" 
  Script = GetTags("c:\test\All Saints - Black Coffee.mp3") 
  dhCallMethod(obj, "AddCode(%T)", @Script) 
  ; -> bis hierin OK, aber dann....
  dhGetValue("%T", @Result, obj, "GetIteminfo(%T)", @"Bitrate") 
  ;--> dhGetValue... geht schon nicht mehr  "object doesn`t support..."
  ; ---> was mach ich denn da verkehrt ?
  If Result 

    MessageRequester("Bitrate:", PeekS(Result), #MB_ICONINFORMATION) 
    dhFreeString(Result) : Result = 0 

  EndIf 

  dhReleaseObject(obj) : obj = 0 

EndIf
PurePi
Beiträge: 41
Registriert: 08.02.2007 08:18

S O L V E D !

Beitrag von PurePi »

OK: Augen auf, Verstand einschalten - und schon wird alles gut... :allright:

Code: Alles auswählen

dhGetValue("%T", @Result, obj, "GetIteminfo(%T)", @"Bitrate") 
--> Unfug
dhGetValue("%T", @Result, obj, "eval(%T)", @"Bitrate") 
--> so ist`s recht   
:wink:
Werde dann mal auf DispHelper umstellen (damit geht das ganze auch aus einer Procedure).
Bzgl. ScriptControl: Die scheint ohne Änderungen nicht unter 4.20 zu funktionieren. Wenn jemand die Anpassungen vornehmen kann /will (mein Know How reicht dafür leider nicht), würde ich für Tests gern zur Verfügung stehen.

Gruß
Bernd
Gesperrt