PureBoard
https://www.purebasic.fr/german/

ComLib_PB4 mit PB 4.20 (beta 2)
https://www.purebasic.fr/german/viewtopic.php?f=19&t=16169
Seite 1 von 2

Autor:  PurePi [ 29.03.2008 18:27 ]
Betreff des Beitrags:  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()

Autor:  ts-soft [ 29.03.2008 19:05 ]
Betreff des Beitrags: 

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

Autor:  PurePi [ 29.03.2008 19:36 ]
Betreff des Beitrags:  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

Autor:  ts-soft [ 29.03.2008 19:41 ]
Betreff des Beitrags:  Re: ScriptControl anstatt ComLib_PB4

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

Autor:  PurePi [ 29.03.2008 20:21 ]
Betreff des Beitrags: 

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

Autor:  ts-soft [ 29.03.2008 20:38 ]
Betreff des Beitrags: 

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

PureDisphelper hat viele, viele Beispiele, auch VBS!

Autor:  Kiffi [ 29.03.2008 20:39 ]
Betreff des Beitrags: 

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

Autor:  ts-soft [ 29.03.2008 20:43 ]
Betreff des Beitrags: 

Eins der Beispiele hat auch den treffenden Namen: VBS.pb
Code:
; 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

Autor:  PurePi [ 29.03.2008 21:05 ]
Betreff des Beitrags: 

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

Autor:  Kiffi [ 29.03.2008 21:30 ]
Betreff des Beitrags: 

PurePi hat geschrieben:
Code:
   ProcedureReturn

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

Grüße ... Kiffi

Seite 1 von 2 Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/