Hmm....!! Well yes could be done but not as part of any release of DBD::Oracle it would have to be you own hacked version A few pointers to start. You will not be able to 'get' a handle and retrun it as a Scalar it will only ever be a pointer so you will just get some sort of number, You would simly edit the Oracle.xs file add in the includes to your C++ .h files then add a few extra 'ora_' functions to take care of you C++ calls; A quick example void ora_some_c_call(dbh) SV *dbh PREINIT: D_imp_dbh(dbh); //this gets all the OCI handles for you (see dbdimp.h for the sturct imp_dbh_st) CODE: MYSomeC_Plus_Plus_method(dbh->envhp,dbh->svchp,dbh->seshp,dbh->srvhp); Myself I would write a small 'c' wrapper that would call you c++ and just a single .XS function that calls that small 'c' wrapper to fire your function. Hope this helps Cheers John
> Date: Thu, 27 Oct 2011 09:48:54 -0400 > From: bro...@deseret.com > To: byter...@hotmail.com > CC: dbi-users@perl.org > Subject: Re: DBI-Users> RE: DBD-Oracle - obtaining OCI handles from $dbh > > Yes, I assumed I would need to extend DBD::Oracle is some manner > to allow those handles to be extracted from a $dbh object. > > The specific OCI handles that the C++ libraries use are > > - Environment handle > - Service Context handle > - Session handle > - Server handle > > My initial thought process on how it might work is this > > Create a method in the DBD::Oracle XS code to retrieve those > handles and return them back to Perl space as a scalar. > > Then with the Perl scalars that hold the OCI handles obtained from > $dbh, pass those values to my Perl bindings to the custom C++ libraries. > (I would need to extend the C++ libraries to allow the set methods > to the objects that hold those OCI handles). > > ...then the C++ libraries should work the same. > > The motivation for this approach is that I have a large code base > of these C++ libraries that have been tested, so it would cost > prohibitive to simply replace them with a pure Perl implementation. > > However, it is so much easier to work with Perl and DBI, it would > be useful to have DBI connect to the database and do some table > lookups. The C++ code could then be integrated seemlessly with my > Perl code. As time allows, I would gradually peel away functionality > from the legacy C++ libraries and implement it in Perl. But to > ease the migration path, this approach seemed to have some merits. > > > Quoting John Scoles (byter...@hotmail.com): > > > > > > > > > > > Date: Wed, 26 Oct 2011 21:46:30 -0400 > > > From: bro...@deseret.com > > > To: dbi-users@perl.org > > > Subject: DBD-Oracle - obtaining OCI handles from $dbh > > > > > > I have created some Perl bindings for some existing custom C++ > > > libraries. > > > > > > One of these C++ libraries implements a class that uses Oracle > > > OCI calls. > > > > > > I would like to create a connection to the Oracle database > > > using Perl's DBI (DBD::Oracle) module, and then ideally share > > > that connection with the C++ libraries. > > > > > > This would require me to extract the Oracle OCI handles from > > > the $dbh object...and then pass them to the C++ libraries. > > > > > > What would be the best way to get access to the underlying > > > Oracle OCI handles from a $dbh object? > > > > Hmm! Interesting concept. Which OCI handles are we talking about?? > > Like Matin said you would have to do that with .XS and you would pass I > > guess a pointer to the > > 'C' struct that holds the pointers to DBD::Oraclles pointers? > > > > You would have to cast that struct into you C++ somehow?? > > > > There would be a good number of handles to pass over. You might be able to > > find them by looking at the Perl process tree > > and finding the SV that holds the struct and then sening that over? > > > > All just guesses on my part. > > > > Interesting concept non the less. > > > > Cheers > > John > >