Programming > Problems & Solutions

O2 SB Embed

(1/5) > >>

JRS:
Charles,

I'm trying to get scriba_NewSbArgs working in O2. You show an example in SbWin2.o2bas which doesn't complain like it does for me. The scriba.inc definition of this function doesn't reference the arguments after the mask string and I get an O2 error with a parameter mismatch. Did you ever get this function to work?

Here is an example of it working in CBASIC.

https://allbasic.info/forum/index.php?topic=628.msg7563#msg7563

JRS:
I noticed that you went SB direct with the following rather than using the scriba.inc file. Does this make it easier to call functions with a variable number of arguments?


--- Code: OxygenBasic ---  sys sb=LoadLibrary libScriba  '  'http://www.scriptbasic.org/docs/dg/devguide_3.3.html  extern  bind sb  {  scriba_new                   ' @newmem, @freemem  scriba_SetStdin()            ' pProgram,@function  scriba_SetStdout()           ' pProgram,@function  scriba_SetEmbedPointer()     ' pProgram,@function  scriba_LoadConfiguration     ' pProgram,filename  scriba_destroy               ' pProgram  scriba_DestroySbData         ' pProgram, pData  scriba_SetFileName           ' pProgram, strptr filename  scriba_LoadSourceProgram     ' pProgram  scriba_LoadProgramString     ' pProgram, SrcString, len  scriba_Run                   ' pProgram, strptr commandline  scriba_GetVariable           ' pProgram, serial, psbData  scriba_SetVariable           ' pProgram, serial, type, longVal, doubleVal, charVal*, size  scriba_LookupVariableByName  ' pProgram, strptr name  scriba_LookupFunctionByName  ' pProgram, strptr name  scriba_Call                  ' pProgram, serial  scriba_CallArg               ' pProgram, serial,ArgFormString i/r/s/b,args...  scriba_NewSbArgs             ' pProgram, string i/r/s/b,args  scriba_CallArgEx             ' pProgram, serial,ReturnData,countArgs,*ArgDate  scriba_DestroySbArgs         ' pProgram, pArgData, CountArgs  scriba_DestroySbData         ' pProgram, pSbData  scriba_NewSbString           ' pProgram, char* s  }  end extern 

JRS:
I was able to get it working using the extern approach.

ScriptBasic can be used in 4 ways.
[*] Console interpreter with stdio redirection
[*] Windows interpreter for GUI apps
[*] Muli-threaded webserver as a service
[*] Enbeddable API as a DLL
[/list]

Runs on everything.  ANSI C based.


--- Code: OxygenBasic ---' O2 SB Embed % filename "o2sb.exe"includepath "$/inc/"include "RTL32.inc"% libScriba = "libScriba.dll"indexbase 0 type SbData  typ as dword  siz as dword  union {    dbl as double    lng as sys    str as char*    gen as sys  }end type #define SBT_UNDEF  0#define SBT_DOUBLE 1#define SBT_LONG   2#define SBT_STRING 3#define SBT_ZCHAR  4 sys pProgram, iError, cArgssys f1, f2, vsys n, msys qdatSbData ReturnData, ArgData[3]sbData pdat sys sb=LoadLibrary libScribaextern cdecl  bind sb  {  scriba_new  scriba_SetStdin()  scriba_SetStdout()  scriba_SetEmbedPointer()  scriba_LoadConfiguration  scriba_destroy  scriba_DestroySbData  scriba_SetFileName  scriba_LoadSourceProgram  scriba_LoadProgramString  scriba_Run  scriba_GetVariable  scriba_SetVariable  scriba_LookupVariableByName  scriba_LookupFunctionByName  scriba_Call  scriba_CallArg  scriba_NewSbArgs  scriba_CallArgEx  scriba_DestroySbArgs  scriba_DestroySbData  scriba_NewSbString  }end extern  function newmem cdecl (sys le) as sys, export  return getmemory leend function function freemem cdecl (sys p) export  freememory pend function pProgram = scriba_new(@newmem, @freemem)scriba_LoadConfiguration(pProgram, "C:\Windows\SCRIBA.INI")scriba_SetFileName(pProgram, "test.sb")scriba_LoadSourceProgram(pProgram)scriba_Run(pProgram,"") ' Get Global Var  sbdata *p  v = scriba_LookupVariableByName(pProgram, "main::a")scriba_GetVariable(pProgram, v, @@p)print "A: " + str(p.lng) ' Create SB Variant ArraysbData *arg@arg = scriba_NewSbArgs(pProgram,"i r s", 1, .2, "three")print str(arg[0].lng) + " | " + str(arg[1].dbl) + " | " + arg[2].str  scriba_destroy(pProgram) 
test.sb

--- Code: Script BASIC ---a = 99

03/26/2021  11:01 PM            14,336 o2sb.exe


JRS:
This example shows how to use ScriptBasic syntax in your Oxygen Basic program.

I can't thank Charles enough for the enormous effort he invested in untangling ScriptBasic's macro pointer C environment to O2.


--- Code: OxygenBasic ---' O2 SB Syntax Embed % filename "replace.exe"includepath "$/inc/"include "RTL32.inc"% libScriba = "libScriba.dll"indexbase 0 type SbData  typ as dword  siz as dword  union {    dbl as double    lng as sys    str as char*    gen as sys  }end type sys sb = LoadLibrary libScribaextern cdecl  bind sb  {  scriba_new  scriba_LoadConfiguration  scriba_SetFileName  scriba_LoadSourceProgram  scriba_Run  scriba_LookupFunctionByName  scriba_NewSbArgs  scriba_CallArgEx  scriba_DestroySbArgs  scriba_destroy  }end extern function newmem cdecl (sys le) as sys, export  return getmemory leend function function freemem cdecl (sys p) export  freememory pend function sys pProgram. fnsnsbData *argsbData *argr pProgram = scriba_new(@newmem, @freemem)scriba_LoadConfiguration(pProgram, "C:\Windows\SCRIBA.INI")scriba_SetFileName(pProgram, "sbfunctions")scriba_LoadSourceProgram(pProgram)scriba_Run(pProgram, "") @arg = scriba_NewSbArgs(pProgram, "s s s i i", "Hello World", "Hello", "Goodbye", 1, 1)fnsn = scriba_LookupFunctionByName(pProgram, "main::sb_replace")  @argr = scriba_NewSbArgs(pProgram,"s", "")scriba_CallArgEx(pProgram, fnsn, argr, 5, arg)print argr.str scriba_DestroySbArgs(pProgram, arg, 5)scriba_DestroySbArgs(pProgram, argr, 1)scriba_destroy(pProgram) 
sbfunctions

--- Code: Script BASIC ---' sbfunctions - ScriptBasic syntax function wrappers FUNCTION sb_replace(basestr, searchstr, replacestr, occurances, startpos)  sb_replace = REPLACE(basestr, searchstr, replacestr, occurances, startpos)END FUNCTION 

JRS:
This example shows calling a ScriptBasic function that uses the cURL extension module to do a request to the OpenWeather API returning a JSON response.


--- Code: OxygenBasic ---' O2 SB cURL OpenWeather Example % filename "weather.exe"includepath "$/inc/"include "RTL32.inc"% libScriba = "libScriba.dll" indexbase 0 type SbData  typ as dword  siz as dword  union {    dbl as double    lng as sys    str as char*    gen as sys  }end type sys sb = LoadLibrary libScribaextern cdecl  bind sb  {  scriba_new  scriba_LoadConfiguration  scriba_SetFileName  scriba_LoadSourceProgram  scriba_Run  scriba_LookupFunctionByName  scriba_NewSbArgs  scriba_CallArgEx  scriba_DestroySbArgs  scriba_destroy  }end extern function newmem cdecl (sys le) as sys, export  return getmemory leend function function freemem cdecl (sys p) export  freememory pend function sys pProgram, fnsnsbData *argsbData *argr pProgram = scriba_new(@newmem, @freemem)scriba_LoadConfiguration(pProgram, "C:\Windows\SCRIBA.INI")scriba_SetFileName(pProgram, "weather.sb")scriba_LoadSourceProgram(pProgram)scriba_Run(pProgram, "") @arg = scriba_NewSbArgs(pProgram, "s", "Anacortes,US")fnsn = scriba_LookupFunctionByName(pProgram, "main::get_weather")  @argr = scriba_NewSbArgs(pProgram,"s", "")scriba_CallArgEx(pProgram, fnsn, argr, 1, arg)print argr.str scriba_DestroySbArgs(pProgram, arg, 1)scriba_DestroySbArgs(pProgram, argr, 1)scriba_destroy(pProgram) 
weather.sb

--- Code: Script BASIC ---' OpenWeather - Curl Example IMPORT curl.sbi FUNCTION Get_Weather(place)  ch = curl::init()  curl::option(ch, "URL", "http://api.openweathermap.org/data/2.5/weather?q=" & place & "&units=imperial&appid=MY_API_KEY")  curl::option(ch, "CUSTOMREQUEST", "GET")  response = curl::perform(ch)  curl::finish(ch)  Get_Weather = responseEND FUNCTION 

Navigation

[0] Message Index

[#] Next page

Go to full version