ComLib_PB4 mit PB 4.20 (beta 2)
ComLib_PB4 mit PB 4.20 (beta 2)
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()
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()
- 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
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
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.
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
ScriptControl anstatt ComLib_PB4
@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
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
- 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
Am besten die Lib neukompilieren, dafür ist es doch OpenSourcePurePi hat geschrieben: Ich benutze die ScriptControl Lib (FileDate: 26.07.2006) und NICHT die ComLib_PB4
(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.
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Besten Dank für die Info.
Das sollte von mir auch kein Gemecker sein...
Ich bin leider (zumindest was PB anbelangt) nur "Anwendungs"Programmierer 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
Das sollte von mir auch kein Gemecker sein...
Ich bin leider (zumindest was PB anbelangt) nur "Anwendungs"Programmierer 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
- 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
Die Sourcen sind beim Download dabei. Zum kompilieren brauchste TailBite, findeste im engl. Forum.
PureDisphelper hat viele, viele Beispiele, auch VBS!
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.
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
- 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
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.
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
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
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
da haste was vergessen zu posten, oder ist das in Deinem Code auch so?PurePi hat geschrieben:Code: Alles auswählen
ProcedureReturn
Grüße ... Kiffi
Hygge