well.... yeah... dlls are programmed in c++, so you can use everything to do with c++ in a dll, as long as the interface is like the standard DBPro commands :
function arg1, arg2, arg3, ... argn
ret=function(arg1,arg2,arg3, ... argn)
there are tuts for making dlls on the dll board.
but yeah, types andfunctions are good. instead of writing something like this:
object a=object(arg1, arg2, arg3);
object b=object(arg1,arg2,arg3);
a.func()
b.func()
you can have an array of objects, have a function that creates a new object and returns the index of the new object in the array (basically a pointer), and pass what object it is as an additional parameter to each of the object's methods, IE:
type object : ... : endtype
dim arr(-1) as object
a=create_object(arg1,arg2,arg3)
b=create_object(arg1,arg2,arg3)
func(a)
func(b)
function create_object(arg1,arg2,arg3)
array insert at bottom arr()
index=array count(arr())
arr(index).arg1=arg1
//...constructor stuff
endfunction index

Is't life, I ask, is't even prudence, to bore thyself and bore thy students?