Programming > Problems & Solutions
O2 SB Embed
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