Here is an example of
IUP running in a threaded mode with the
DLLC extension module for Windows 32 bit.
The
DLLC Windows 32 bit extension module can be found in the current
OxygenBasic build and maintained by Charles Pegge.


Thread #1 script' Thread #1 Script
INCLUDE
"dllcinc.sb"iup = dllfile(
"iup.dll")
IupOpen = dllproc(iup,
"IupOpen cdecl i = (i argc, i argv)")
IupCreate = dllproc(iup,
"IupCreate cdecl i = (c *classname)")
IupSetAttributes = dllproc(iup,
"IupSetAttributes cdecl i = (i ih, c *attr_str)")
IupAppend = dllproc(iup,
"IupAppend cdecl i = (i ih, cdecl i new_child)")
IupSetCallback = dllproc(iup,
"IupSetCallback cdecl i = (i ih, c*cb_name, i funcaddr)")
IupShow = dllproc(iup,
"IupShow cdecl i = (i ih)")
IupMainLoop = dllproc(iup,
"IupMainLoop cdecl i = ()")
IupClose = dllproc(iup,
"IupClose cdecl ()")
GLOBAL CONST IUP_DEFAULT = -2
FUNCTION Btn1_T1(ih, mbut, pstat)
PRINT "B1 - T1 ",
CHR(mbut),
" - ", pstat,
"\n" Btn1_clicked = IUP_DEFAULT
END FUNCTIONFUNCTION Btn2_T1(ih)
dllprnt
"B2 - T1\n" Btn2_clicked = IUP_DEFAULT
END FUNCTIONFUNCTION Btn3_T1(ih)
dllprnt
"B3 - T1\n" Btn3_clicked = IUP_DEFAULT
END FUNCTIONFUNCTION main(pProg,idat)
dllcall(IupOpen, 0, 0)
win = dllcall(IupCreate,
"dialog")
dllcall(IupSetAttributes, win,
"TITLE=\"Thread #1\
", SIZE=300x")
horzbox = dllcall(IupCreate,
"hbox")
dllcall(IupSetAttributes, horzbox,
"GAP=5")
btn1 = dllcall(IupCreate,
"button")
dllcall(IupSetAttributes, btn1,
"TITLE=Button1, EXPAND=HORIZONTAL")
btn2 = dllcall(IupCreate,
"button")
dllcall(IupSetAttributes, btn2,
"TITLE=Button2, EXPAND=HORIZONTAL")
btn3 = dllcall(IupCreate,
"button")
dllcall(IupSetAttributes, btn3,
"TITLE=Button3, EXPAND=HORIZONTAL")
dllcall(IupAppend, horzbox, btn1)
dllcall(IupAppend, horzbox, btn2)
dllcall(IupAppend, horzbox, btn3)
dllcall(IupAppend, win, horzbox)
dllcall(IupSetCallback, btn1,
"BUTTON_CB", dllclbk(1, pProg,
"MAIN::Btn1_T1", 3,IUP_DEFAULT,idat))
dllcall(IupSetCallback, btn2,
"ACTION", dllclbk(2, pProg,
"MAIN::Btn2_T1", 1,IUP_DEFAULT,idat))
dllcall(IupSetCallback, btn3,
"ACTION", dllclbk(3, pProg,
"MAIN::Btn3_T1", 1,IUP_DEFAULT,idat))
dllcall(IupShow, win)
Main=IupMainLoop
END FUNCTION Thread #2 script' Thread #2 Script
INCLUDE
"dllcinc.sb"iup = dllfile(
"iup.dll")
IupOpen = dllproc(iup,
"IupOpen cdecl i = (i argc, i argv)")
IupCreate = dllproc(iup,
"IupCreate cdecl i = (c *classname)")
IupSetAttributes = dllproc(iup,
"IupSetAttributes cdecl i = (i ih, c *attr_str)")
IupAppend = dllproc(iup,
"IupAppend cdecl i = (i ih, cdecl i new_child)")
IupSetCallback = dllproc(iup,
"IupSetCallback cdecl i = (i ih, c*cb_name, i funcaddr)")
IupShow = dllproc(iup,
"IupShow cdecl i = (i ih)")
IupMainLoop = dllproc(iup,
"IupMainLoop cdecl i = ()")
IupClose = dllproc(iup,
"IupClose cdecl ()")
GLOBAL CONST IUP_DEFAULT = -2
FUNCTION Btn1_T2(ih)
dllprnt
"B1 - T2\n" Btn1_clicked = IUP_DEFAULT
END FUNCTIONFUNCTION Btn2_T2(ih)
dllprnt
"B2 - T2\n" Btn2_clicked = IUP_DEFAULT
END FUNCTIONFUNCTION Btn3_T2(ih)
dllprnt
"B3 - T2\n" Btn3_clicked = IUP_DEFAULT
END FUNCTIONFUNCTION main(pProg,idat)
dllcall(IupOpen, 0, 0)
win = dllcall(IupCreate,
"dialog")
dllcall(IupSetAttributes, win,
"TITLE=\"Thread #2\
", SIZE=300x")
horzbox = dllcall(IupCreate,
"hbox")
dllcall(IupSetAttributes, horzbox,
"GAP=5")
btn1 = dllcall(IupCreate,
"button")
dllcall(IupSetAttributes, btn1,
"TITLE=Button1, EXPAND=HORIZONTAL")
btn2 = dllcall(IupCreate,
"button")
dllcall(IupSetAttributes, btn2,
"TITLE=Button2, EXPAND=HORIZONTAL")
btn3 = dllcall(IupCreate,
"button")
dllcall(IupSetAttributes, btn3,
"TITLE=Button3, EXPAND=HORIZONTAL")
dllcall(IupAppend, horzbox, btn1)
dllcall(IupAppend, horzbox, btn2)
dllcall(IupAppend, horzbox, btn3)
dllcall(IupAppend, win, horzbox)
dllcall(IupSetCallback, btn1,
"ACTION", dllclbk(4, pProg,
"MAIN::Btn1_T2", 1,IUP_DEFAULT,idat))
dllcall(IupSetCallback, btn2,
"ACTION", dllclbk(5, pProg,
"MAIN::Btn2_T2", 1,IUP_DEFAULT,idat))
dllcall(IupSetCallback, btn3,
"ACTION", dllclbk(6, pProg,
"MAIN::Btn3_T2", 1,IUP_DEFAULT,idat))
dllcall(IupShow, win)
Main=IupMainLoop
END FUNCTION Start script' Boot (Main / Launcher)
INCLUDE
"dllcinc.sb"bdat=
string(8192,
chr(0))
idat=dllsptr(bdat)
thrM1 = dlltran(
"T1.sb",
"main::main",1,idat)
thrM2 = dlltran(
"T2.sb",
"main::main",2,idat)
LINE INPUT wait
dllclos thrM1,thrM2
dllfile