0 Replies Latest reply on Apr 28, 2004 1:33 PM by 53996

    Can I use OO4O in a DLL

    53996
      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 !