OCCI-VC++ Relese / Debug Problem



  • Hello *,

    Ich versuche mich gerade krampfhaft mit VC++ und OCCI
    Ich habe ein kleines Prohramm geschrieben das nen Connect zur DB macht und nen paar Daten ausliest.
    In der RELEASE-Version bekomme ich den Connect und alles funzt super.
    Aber in der DEBUG-Version bekomme ich eine Fehlermeldung mit der ich nix anfangen kann.

    Ich habe folgende Konfiguration:
    Microsoft Visual Studio 2008 Professional
    Microsoft Visual C++ 2008 on 64-bit Windows Vsita
    10g XE is the Database version

    [code]
    CDB_Handler::CDB_Handler(void)
    :m_env(NULL),m_conn(NULL)
    {
    TRACE("start DB_Handler ctor");
    try {
    m_env = Environment::createEnvironment();
    m_conn = m_env->createConnection( "test", "test", "//testhost:1521/XE" );
    } catch (SQLException &e) {
    int ec = e.getErrorCode();
    
    char buf100;
    sprintf_s(buf,"SQLException Fehlercode = %d", ec);
    
    CA2T message (buf);
    TRACE(message);
    AfxMessageBox(message);
    
    std::string s(e.what());
    CA2T m ( s.c_str() );
    TRACE(m);
    AfxMessageBox(m);
    
    return;
    }
    
    TRACE("end DB_Handler ctor");
    AfxMessageBox(_T("Connection established successfully!"));
    }
    [/code]
    

    Die Befehlszeile in der Releaseversion ist:

    /OUT:"D:\MyDat\SIK-Dat\Neudat\PSP\Visual C++\MFC_DB_Test\Release\MFC_DB_Test.exe" 
    /INCREMENTAL:NO /NOLOGO /LIBPATH:"D:\Programme\oracle\product\10.2.0\client_1\oci\lib\msvc\vc71" /MANIFEST 
    /MANIFESTFILE:"Release\MFC_DB_Test.exe.intermediate.manifest" 
    /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /DEBUG /PDB:"d:\MyDat\SIK-Dat\Neudat\PSP\Visual C++\MFC_DB_Test\Release\MFC_DB_Test.pdb" 
    /SUBSYSTEM:WINDOWS /OPT:REF /OPT:ICF /LTCG /ENTRY:"wWinMainCRTStartup" 
    /DYNAMICBASE /NXCOMPAT /MACHINE:X86 /ERRORREPORT:PROMPT oraocci10.lib
    

    In der Debugversion ist es:

    /OUT:"D:\MyDat\SIK-Dat\Neudat\PSP\Visual C++\MFC_DB_Test\Debug\MFC_DB_Test.exe" 
    /INCREMENTAL /NOLOGO /LIBPATH:"D:\Programme\oracle\product\10.2.0\client_1\oci\lib\msvc\vc71" /MANIFEST 
    /MANIFESTFILE:"Debug\MFC_DB_Test.exe.intermediate.manifest" /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /DEBUG 
    /PDB:"d:\MyDat\SIK-Dat\Neudat\PSP\Visual C++\MFC_DB_Test\Debug\MFC_DB_Test.pdb" 
    /SUBSYSTEM:WINDOWS /ENTRY:"wWinMainCRTStartup" /DYNAMICBASE /NXCOMPAT 
    /MACHINE:X86 /ERRORREPORT:PROMPT oraocci10.lib
    

    Wie gesagt funzt alles in der Releseversion. Aber in der Debugversion bekomme ich folgenden Fehler:

    SQLException Fehlercode = 24960
    ORA-24960: Das Attribut OCI_ATTR_USERNAME ist größer als die maximal zulässige Länge von 255
    Eine Ausnahme (erste Chance) bei 0x01003c9f in MFC_DB_Test.exe: 0xC0000005: Zugriffsverletzung beim Lesen an Position 0x00000000.

    Hat da irgendjemand nen Tipp für mich?

    Thanks in advance.

    Frank



  • Hast du mal einen Breakpoint gesetzt und die Zeile aufgespürt bei der es passiert? (F9 / F10 für Breakpoint/Einzelschritt)



  • Hallo,

    je, ich habe versucht zu debuggen. der Fehler kommt irgendwo aus der lib.
    Ich hatte noch nen anderen Hinweis bekommen und nutze nun die "besser" zu VS2008/vc9 passenden libs

    oraocci10d.lib
    

    Compilieren und linken funktioniert. Aber wenn ich die Applikation starte erhalte ich folgende Fehlermeldung:

    Der Prozedureinsprungspunkt "OCIArrayDescriptotFree" wurde in der DLL "OCI.dll" nicht gefunden

    Folgendes war zu diesem Zeitpunkt geladen:

    "DB_T.exe": "D:\MyDat\SIK-Dat\Neudat\PSP\Visual C++\DB_T\Debug\DB_T.exe" geladen, Symbole wurden geladen.
    "DB_T.exe": "C:\Windows\SysWOW64\ntdll.dll" wurde geladen
    "DB_T.exe": "C:\Windows\SysWOW64\kernel32.dll" wurde geladen
    "DB_T.exe": "D:\tmp\ora_lib_11__x32[b]oraocci11d.dll[/b]" wurde geladen
    "DB_T.exe": "D:\oracle\product\10.2.0\client_2[b]oci.dll[/b]" geladen
    "DB_T.exe": "C:\Windows\SysWOW64\msvcr71.dll" wurde geladen
    "DB_T.exe": "C:\Windows\SysWOW64\advapi32.dll" wurde geladen
    "DB_T.exe": "C:\Windows\SysWOW64\rpcrt4.dll" wurde geladen
    "DB_T.exe": "C:\Windows\SysWOW64\secur32.dll" wurde geladen
    "DB_T.exe": "C:\Windows\SysWOW64\psapi.dll" wurde geladen
    

    So, nun stehe ich wieder auf dem Schlauch.

    Danke für eure Hilfe



  • Das OCI ist aber wirklich eine komplizierte Schnittstelle, vllt solltest Du mal in einem Oracle Developer Forum nachfragen. Kann man denn wirklich einfach so Bibliotheken aus der 10er und der 11er Release so mischen? Gibt es da irgendwo eine Kompatibiltätsmatrix? Du könntest auch mal mit der depends.exe nachschauen ob alle relevanten Symbole aufgelöst worden sind.



  • Edit: Doppelpost wegen Lag


Anmelden zum Antworten