I don't know anything about decls files, but if you're unable to return an object pointer from C++, how about passing in an object with a pointer field and modifying the pointer?
Make sense?
Type result_wrapper Field r.result End Type Local rw.result_wrapper = New result_wrapper get_data(rw) ; call C++ Local r.result = rw\r ; then do the same as before
struct result_wrapper { result * r; }; BBDECL void BBCALL get_data(result_wrapper * rw) { rw->r = new result; //etc
Make sense?