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

ComLib_PB4 mit PB 4.20 (beta 2)

Beitrag von PurePi »

Hallo zusammen,

habe im Zusammenspiel ComLib_PB4 mit PB 4.20 (beta 2) folgendes Problem festgestellt:

Beim Auslesen eines Rückgabewertes aus VBS kommt es zu generell zu einem "Invalid memory access.(read error at adress 0)".
Allerdings nur, wenn das Ganze aus einer Procedure aufgerufen wird.
(s. u.a. SampleCode)
Weitere Anmerkungen:
- unter PB 4.0 läuft das Beispiel problemlos
- gleichen Fehler gibt es auch mit der JHRegistry_420 LIB (beim ausLESEN von Registrywerten)
Mache ich irgendetwas falsch ?
Ist die MemoryVerwaltung unter PB 4.2 grundlegend geändert worden ?
Oder ist es ein Bug ?
Da ich die ComLib vielfach benutze, bin für jeglichen Hinweis dankbar.

Gruß
PurePi


SCtr_SetLanguage("VBScript")
SCtr_SetTimeOut(10000)

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

; folgende Aufrufe funkt. hier (aus dem Hauptprogramm) einwandfrei
; SCtr_AddCode(MyVBS())
; pbMyVar.s=SCtr_EvalStr("MyVar")


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
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 »

Die Lib kann ich im moment nicht finden, aber dafür gibts ja viele Alternativen:
http://www.purebasic.fr/german/viewtopi ... 5896#95896
http://www.purearea.net/pb/showcase/show.php?id=413

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
PurePi
Beiträge: 41
Registriert: 08.02.2007 08:18

ScriptControl anstatt ComLib_PB4

Beitrag von PurePi »

@Thomas: Danke für den Hinweis
Ich sollte wohl mal sorgfältiger prüfen was ich da so schreibe....
Ich benutze die ScriptControl Lib (FileDate: 26.07.2006) und NICHT die ComLib_PB4

Mit der anderen Alternative (PureDispHelper) komme ich irgendwie nicht klar.

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

Re: ScriptControl anstatt ComLib_PB4

Beitrag von ts-soft »

PurePi hat geschrieben: Ich benutze die ScriptControl Lib (FileDate: 26.07.2006) und NICHT die ComLib_PB4
Am besten die Lib neukompilieren, dafür ist es doch OpenSource :wink:
(nicht getested)
PurePi hat geschrieben:Mit der anderen Alternative (PureDispHelper) komme ich irgendwie nicht klar.

Naja, einfach nochmal die Beispiele durcharbeiten :)

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
PurePi
Beiträge: 41
Registriert: 08.02.2007 08:18

Beitrag von PurePi »

Besten Dank für die Info.
Das sollte von mir auch kein Gemecker sein...
Ich bin leider (zumindest was PB anbelangt) nur "Anwendungs"Programmierer :cry: und stecke ich den tieferer Systemschichten (LIBs, etc.) leider nicht tief genung drin, darum bin ich bei solchen Fehlern dann auch leider "schnell am Ende".

Zum Them die "Lib neu kompilieren" muß ich dafür nicht den Source haben ?? Wenn ja, wo gibts den ?
Habe soeben mal das Forum durchsucht nach einem HowTo "Lib erstellen/Komiplieren" aber nichts gefunden.
Gibts hier soetwas ?
Würde mich gern in die Thematik einarbeiten. <)

Was den PureDispHelper anbelangt:
-> Das habe ich rauf und runter gelesen und probiert (ohne Erfolg)
--> daher habe ich diesen Ansatz verworfen

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 »

Die Sourcen sind beim Download dabei. Zum kompilieren brauchste TailBite, findeste im engl. Forum.

PureDisphelper hat viele, viele Beispiele, auch VBS!
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:Was den PureDispHelper anbelangt:
-> Das habe ich rauf und runter gelesen und probiert (ohne Erfolg)
--> daher habe ich diesen Ansatz verworfen
was wolltest Du noch mal konkret machen?

Grüße ... Kiffi
Hygge
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 »

Eins der Beispiele hat auch den treffenden Namen: VBS.pb

Code: Alles auswählen

; by Kiffi and ts-soft

EnableExplicit

Procedure.s GetHtmlTitleVbs(URL$)

  Protected Script$

  Script$ = "Set myIE = CreateObject(" + #DQUOTE$ + "InternetExplorer.Application" + #DQUOTE$ + ")" + #CRLF$
  Script$ + "Do While myIE.Busy" + #CRLF$
  Script$ + "Loop" + #CRLF$
  Script$ + "myIE.Visible = False" + #CRLF$
  Script$ + "myIE.Navigate " + #DQUOTE$ + URL$ + #DQUOTE$ + #CRLF$
  Script$ + "Do While myIE.ReadyState <> 4" + #CRLF$
  Script$ + "Loop" + #CRLF$
  Script$ + "Set oDoc = myIE.Document" + #CRLF$
  Script$ + "myTitle = oDoc.title" + #CRLF$
  Script$ + "Set oDoc = Nothing" + #CRLF$
  Script$ + "Set myIE = Nothing" + #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 = GetHtmlTitleVbs("www.purebasic.com")
  dhCallMethod(obj, "AddCode(%T)", @Script)
  dhGetValue("%T", @Result, obj, "Eval(%T)", @"myTitle")

  If Result

    MessageRequester("PureBasic.com Titel:", PeekS(Result), #MB_ICONINFORMATION)
    dhFreeString(Result) : Result = 0

  EndIf

  dhReleaseObject(obj) : obj = 0

EndIf
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
PurePi
Beiträge: 41
Registriert: 08.02.2007 08:18

Beitrag von PurePi »

Nochmals besten Dank.
Jo, den Source von ScriptControl habe ich gefunden (ist ja alles da, man muß nur mal genau gucken - aber heute geht bei mir irgendwie alles schief. )

Mit Tailbite werde ich mich gleich mal beschäftigen.

@kiffi
u.a. Source ist das was ich in VBS "abfahre" (und ums verrecken nicht mit dem DispHelper ans Laufen kriege).
-> Geht um MP3-Tags (lesen+schreiben)

Procedure.s TagKnecht(File$,ToDo$,Title$,Artist$,Year$,Album$,Kommentar$,ID$)

; Was is: read or write
VBS$ +"ToDo="+ Chr(34) +ToDo$+ Chr(34)+#CRLF$
; Object klar machen
VBS$ + "Set oWMP = CreateObject(" + Chr(34) + "wmPlayer.ocx" + Chr(34) + ") " + #CRLF$
VBS$ + "Set oMedia = oWMP.newMedia("+Chr(34)+File$+ Chr(34)+")" + #CRLF$
;Read
VBS$ + "If ToDo="+ Chr(34) + "Read"+ Chr(34) + " Then" + #CRLF$
VBS$ + "Duration=oMedia.GetIteminfo(" + Chr(34) + "Duration"+ Chr(34) + ") " + #CRLF$
VBS$ + "Bitrate=oMedia.GetIteminfo(" + Chr(34) + "Bitrate"+ Chr(34) + ") " + #CRLF$
VBS$ + "Titel=oMedia.GetIteminfo(" + Chr(34) + "Title"+ Chr(34) + ") " + #CRLF$
VBS$ + "Artist=oMedia.GetIteminfo(" + Chr(34) + "Artist"+ Chr(34) + ") " + #CRLF$
VBS$ + "Jahr=oMedia.GetIteminfo(" + Chr(34) + "WM/Year"+ Chr(34) + ") " + #CRLF$
VBS$ + "Album=oMedia.GetIteminfo(" + Chr(34) + "WM/AlbumTitle"+ Chr(34) + ") " + #CRLF$
VBS$ + "FileID1=oMedia.GetIteminfo(" + Chr(34) + "copyright" + Chr(34) + ") " + #CRLF$
VBS$ + "FileID2=oMedia.GetIteminfo(" + Chr(34) + "WM/UniqueFileIdentifier" + Chr(34) + ") " + #CRLF$
VBS$ + "FileID3=oMedia.GetIteminfo(" + Chr(34) + "WM/TrackNumber" + Chr(34) + ") " + #CRLF$
VBS$ + "End If"+ #CRLF$
;Write
VBS$ + "If ToDo="+ Chr(34) + "Write"+ Chr(34) + " Then" + #CRLF$
VBS$ + "Ret=oMedia.SetIteminfo(" + Chr(34) + "Title" + Chr(34) + ","+ Chr(34) +Title$+ Chr(34) + ") " + #CRLF$
VBS$ + "Ret=oMedia.SetIteminfo(" + Chr(34) + "Artist" + Chr(34) + ","+ Chr(34) +Artist$+ Chr(34) + ") " + #CRLF$
VBS$ + "Ret=oMedia.SetIteminfo(" + Chr(34) + "WM/Year" + Chr(34) + ","+ Chr(34) +Year$+ Chr(34) + ") " + #CRLF$
VBS$ + "Ret=oMedia.SetIteminfo(" + Chr(34) + "WM/AlbumTitle" + Chr(34) + ","+ Chr(34) +Album$+ Chr(34) + ") " + #CRLF$
VBS$ + "Ret=oMedia.SetIteminfo(" + Chr(34) + "Description" + Chr(34) + ","+ Chr(34) +Kommentar$+ Chr(34) + ") " + #CRLF$
VBS$ + "Ret=oMedia.SetIteminfo(" + Chr(34) + "copyright" + Chr(34) + ","+ Chr(34) +ID$+ Chr(34) + ") " + #CRLF$
VBS$ + "Ret=oMedia.SetIteminfo(" + Chr(34) + "WM/UniqueFileIdentifier" + Chr(34) + ","+ Chr(34) +ID$+ Chr(34) + ") " + #CRLF$
VBS$ + "Ret=oMedia.SetIteminfo(" + Chr(34) + "WM/TrackNumber" + Chr(34) + ","+ Chr(34) +ID$+ Chr(34) + ") " + #CRLF$
VBS$ + "End If"+ #CRLF$

ProcedureReturn


EndProcedure
Benutzeravatar
Kiffi
Beiträge: 10621
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

PurePi hat geschrieben:

Code: Alles auswählen

	ProcedureReturn
da haste was vergessen zu posten, oder ist das in Deinem Code auch so?

Grüße ... Kiffi
Hygge
Gesperrt