OO4O usage in a VC++ 6 DLL ?

From: shamel <sylvain.hamel_at_ca.transport.bombardier.com>
Date: 4 May 2004 07:24:36 -0700
Message-ID: <539b4630.0405040624.4e572be2_at_posting.google.com>



Hi,

I'm just starting to use OO4O on a project and I do not know a lot about Oracle.

I wrote a standard Windows DLL using VC++ 6. In this DLL, I have a database class (DbOO4OClass) that use OO4O.

The DLL contains Startup and Shutdown functions that are called by the application to do the OStartup and OShutdown calls.

When a DbOO4OClass instance is created, it creates one ODatabase and one ODynaset objects (using new) that are used later in the class methods to access the database.

aPtrConnection = new ODatabase;
aPtrRecordset = new ODynaset;

When the DbOO4OClass instance is destroyed, the destructor deletes the ODatabase and ODynaset.

if( aPtrRecordset != NULL )
{

aPtrRecordset->Close();

// ****** memory problem when calling delete delete aPtrRecordset;
aPtrRecordset = NULL;
}

if( aPtrConnection != NULL )
{

aPtrConnection->Close();
delete aPtrConnection;
aPtrConnection = NULL;
}

The problem is that when the aPtrRecordset object is deleted, there is a memory exception. If I remove the delete, VC++ tells me that there is a memory leak.
Everything else in the class works well (queries, calling stored procs, etc...)

The same kind of memory error occurs in code like this:

for( int index = 0; index < fieldCount; index++ )
{

OField field = fields.GetField( index );

// do something with field
}

When the OField object is deleted at the end of the for loop, there is a memory error.

When I follow the code in the disassembly window, the error seems to be in the Oracle object destructor.

Is there something specific to do when using OO4O in a DLL?

Is it because the DbOo4OClass instance is created in the application context and OO4O calls done in the DLL context?

Something else I missed?

Thanks for your help ! Received on Tue May 04 2004 - 16:24:36 CEST

Original text of this message