mixed-managed Dll Probleme



  • Moin Moin!

    Ich hatte vor einiger Zeit hier schon einmal gepostet, allerdings habe ich jetzt neue Probleme, die ich einfach nicht weg bekomme:

    Ich bin dabei, eine mixed-managed Dll als Schnittstelle zwischen unmanaged C++ und C# zu schreiben. Dabei soll vom nativen C++ Code aus managed Funktionen aufgerufen werden. Im Endeffekt möchte ich mich zu einem C# Server connecten und diesem dann berechnete Daten aus dem unmanaged C++ Code schicken.

    Hierfür nutzte ich eine unmanaged Wrapperklasse, die über gcroot eine Instanz meiner managed Klasse hält. Das halten dieser Instanz ist für mich wichtig, da ich mich nur einmal zu Beginn des Programms mit dem Server verbinden möchte und diese Verbindung bis zum Ende bestehen bleiben soll.

    Der Aufbau dieser Dll klappt auch ohne Compiler-Fehler, allerdings kracht es dafür in der Ausführung:
    Ich binde meine unmanaged Klasse in meiner .exe ein und möchte als nächstes ein Objekt meiner unmanaged Klasse, die ja meine managed Klasse hält erstellen.
    Ich bekomme aber beim Ausführen eine exception:

    "Unhandled exception at 0x7c901230 in ControlPanel.exe: User breakpoint"

    Diese ist aber absolut unabhängig davon, was ich in meiner Dll anstelle: Ich habe auch schon geguckt, ob es am managed Codepart liegt und alles entsprechende auskommentier - ohne Erfolg. Ich bin nur so weit gekommen:

    Wenn ich statt:

    CServerConnection *Con = new CServerConnection();

    nur

    CServerConnection *Con;

    schreibe, funktioniert es - ok. Krachen tut das Programm dann, sobald ich folgende Zeile irgendwo einfüge:

    Con = new CServerConnection();

    Dabei kommt die exception aber nicht erst in der Zeile, wenn diese ausgeführt werden sollte, sondern sobald diese Zeile überhaupt im Code existiert.

    Der Output sagt mir:

    'ControlPanel.exe':
    ...
    Loaded 'D:\..\Debug\ServerConnection.dll', Symbols loaded.
    'ControlPanel.exe': Loaded 'C:\WINNT\system32\mscoree.dll', No symbols loaded.
    'ControlPanel.exe': Loaded 'C:\WINNT\system32\MFC71DEU.DLL', No symbols loaded.
    'ControlPanel.exe': Loaded 'C:\WINNT\system32\MSCTF.dll', No symbols loaded.
    *** An Access Violation occurred in "d:\...\Debug\ControlPanel.exe" :
    The instruction at 7472211B tried to read from an invalid address, 00000B90

    Das schaut nach einer heap-corruption (hab etwas gegoogelt) aus. Ich habe allerdings keine Ahnung, wie ich diesen Fehler angehen kann, da er anscheined das Laden nicht hinbekommt...
    Auch die Nutzung der Methoder __crt_dll_initialize() hilft nicht. (Ich habe verschiedene Anleitungen ausprobiert).

    Hoffentlich hat hier jemand eine Idee, wie ich den Fehler beheben könnte!

    mfg
    Sönke



  • Ich vergaß zu erwähnen:
    Ich arbeite auf Win XP, Visual Studio 2003 (was wohl auch die Probleme macht, auf 2005 müsste das einfach sein), und soweit ich weiß/recht sicher bin .NET Framework 1.1



  • Warum debuggst Du nicht?
    Du musst nur den Debugger auf "Mixed-Mode" in den Projekteinstellungen unter "Debugging|Debugger Type" auf "Mixed" stellen.



  • Das geht ja eben nicht! Ich habe nicht einmal die Möglichkeit, einen Breakpoint zu nutzen, da das Programm sofort abstürzt, ohne die erste Zeile zu erreichen.

    Die Release-Version läuft ohne Probleme.


Anmelden zum Antworten