Programming > Problems & Solutions

O2 SB Embed

<< < (5/5)

JRS:
This is an example of getting and setting ScriptBasic variables from O2.

testvars.sb

--- Code: Script BASIC ---a = 1      b = .2     c = "Three" 

--- Code: Text ---% filename "getsetvars.exe"                                            includepath "$/inc/"                                                include "RTL32.inc"                                                 include "sbembed.inc"                                               #console                                                            uses console                                                                                                                            sys pProgram                                                        sbData *arg                                                                                                                string cr = chr(13,10) string src = `IMPORT "testvars.sb"` + cr                                                                                                  pProgram = scriba_new(@newmem, @freemem)                            scriba_LoadConfiguration(pProgram, "C:\Windows\SCRIBA.INI")         scriba_SetFileName(pProgram, "none")                                scriba_LoadProgramString(pProgram, src, len(src))                   scriba_Run(pProgram, "")                                                                                                                sys v_a = scriba_LookupVariableByName(pProgram, "main::a")sys v_b = scriba_LookupVariableByName(pProgram, "main::b")sys v_c = scriba_LookupVariableByName(pProgram, "main::c") ' Get defined variable values scriba_GetVariable(pProgram, v_a, @@arg)print arg.lng + crscriba_GetVariable(pProgram, v_b, @@arg)print arg.dbl + crscriba_GetVariable(pProgram, v_c, @@arg)print arg.str + cr + cr ' Set variable values scriba_SetVariable(pProgram, v_a, SBT_LONG, 101, 0.0, "", 0)scriba_SetVariable(pProgram, v_b, SBT_DOUBLE, 0, 2.2, "", 0)scriba_SetVariable(pProgram, v_c, SBT_STRING, 0, 0.0, "Thirty Three", 12) ' Get changed variable values scriba_GetVariable(pProgram, v_a, @@arg)print arg.lng + crscriba_GetVariable(pProgram, v_b, @@arg)print arg.dbl + crscriba_GetVariable(pProgram, v_c, @@arg)print arg.str + cr scriba_DestroySbArgs(pProgram, arg, 1)scriba_destroy(pProgram) 

C:\OxygenBasic\projectsC\ScriptBasic\EmbedSb>getsetvars
1
0.2
Three

101
2.2000000000000002
Thirty Three

C:\OxygenBasic\projectsC\ScriptBasic\EmbedSb>

JRS:
This is an example of O2 using a VB6 OCX form as a login UI, calling back to ScriptBasic to set the userid global variable which O2 retrieves after the form closes.

This wraps up my ScriptBasic Embedding introduction with Oxygen Basic. I hope you found it informative and maybe useful. Comments welcome.


--- Code: Text ---' O2 VB Login Form Example % filename "o2vblogin.exe"                                            includepath "$/inc/"                                                include "RTL32.inc"                                                 include "sbembed.inc"                                               #console                                                            uses console                                                                                                                            sys pProgram                                                        sbData *arg                                                         sbData *argr                                                        string cr = chr(13,10)                                               int sb_call = 1                                                     int sb_get  = 2                                                     int sb_let  = 4                                                     int sb_set  = 8                                                     string src = "IMPORT sbembed.sbi" + cr + _             `IMPORT "callback.sb"` + cr                                                                                                 pProgram = scriba_new(@newmem, @freemem)                            scriba_LoadConfiguration(pProgram, "C:\Windows\SCRIBA.INI")         scriba_SetFileName(pProgram, "none")                                scriba_LoadProgramString(pProgram, src, len(src))                   scriba_Run(pProgram, "")                                                                                                                @argr = scriba_NewSbArgs(pProgram,"u")                              sys fn1 = scriba_LookupFunctionByName(pProgram, "main::sb_create")  sys fn2 = scriba_LookupFunctionByName(pProgram, "main::sb_cbn")     sys fn3 = scriba_LookupFunctionByName(pProgram, "main::sb_release") sys fn4 = scriba_LookupFunctionByName(pProgram, "main::set_callback")  @arg = scriba_NewSbArgs(pProgram, "s", "O2VB.Login")scriba_CallArgEx(pProgram, fn1, argr, 1, arg)sys vbobj = argr.lng@arg = scriba_NewSbArgs(pProgram, "i", vbobj)scriba_CallArgEx(pProgram, fn4, argr, 1, arg)@arg = scriba_NewSbArgs(pProgram, "i s i", vbobj, "ShowOCXForm", sb_call)scriba_CallArgEx(pProgram, fn2, argr, 3, arg)sys ufunc = scriba_LookupVariableByName(pProgram, "main::userid")scriba_GetVariable(pProgram, ufunc, @@arg)print arg.str + cr@arg = scriba_NewSbArgs(pProgram, "i", vbobj)scriba_CallArgEx(pProgram, fn3, argr, 1, arg) scriba_DestroySbArgs(pProgram, arg, 3)scriba_DestroySbArgs(pProgram, argr, 1)scriba_destroy(pProgram) 
callback.sb

--- Code: Script BASIC ---' O2 SB Callback Functions FUNCTION OK_Button_Click(user)  userid = user  OK_Button_Click = TRUEEND FUNCTION  FUNCTION Set_Callback(vbobj)  oCollection = CBN(vbobj, "CallBackHandlers", sb_get)  CBN(oCollection, "Add", sb_call, ADDRESS(OK_Button_Click()), "Login_Form.OK_Button_Click")END FUNCTION 
VB6 Login Form

--- Code: Visual Basic ---Option Explicit Private Declare Function ext_SBCallBack Lib "COM.dll" Alias "SBCallBack" (ByVal EntryPoint As Long, ByVal arg As Long) As LongPrivate Declare Function ext_SBCallBackEx Lib "COM.dll" Alias "SBCallBackEx" (ByVal EntryPoint As Long, ByRef v As Variant) As Variant Private m_owner As LoginPublic LoginSucceeded As Boolean Function ShowMain_Form(owner As Login) As Long    On Error Resume Next    Set m_owner = owner    Me.Show 1    Set m_owner = Nothing    ShowMain_Form = 0    Unload MeEnd Function Private Function TriggerCallBack(nodeID As Long, argValue As Long) As Long    TriggerCallBack = ext_SBCallBack(nodeID, argValue)End Function Private Function TriggerCallBackEx(nodeID As Long, v() As Variant)    TriggerCallBackEx = ext_SBCallBackEx(nodeID, v)End Function Private Sub Cancel_Button_Click()    LoginSucceeded = False    Me.HideEnd Sub Private Sub OK_Button_Click()    Dim nodeID As Long    Dim arg(0) As Variant    Dim rtnVal As Long    If Password_Text = "OxygenBasic" Then        LoginSucceeded = True        nodeID = m_owner.CallBackHandlers("Login_Form.OK_Button_Click")        arg(0) = Login_Form.User_Text        rtnVal = TriggerCallBackEx(nodeID, arg)        Me.Hide    Else        MsgBox "Invalid Password, try again!", , "Login"        Password_Text.SetFocus        SendKeys "{Home}+{End}"    End IfEnd Sub 
VB6 Login Class

--- Code: Visual Basic ---Public CallBackHandlers As New Collection Public Function ShowOCXForm() As Long    ShowOCXForm = Login_Form.ShowMain_Form(Me)End Function 

C:\OxygenBasic\projectsC\ScriptBasic\EmbedSb>o2vblogin
John

C:\OxygenBasic\projectsC\ScriptBasic\EmbedSb>

Navigation

[0] Message Index

[*] Previous page

Go to full version