Doppelte Klassen-Definition durch Referenz und Include
-
Servus Community,
folgendes Problem bereitet mir gerade Kopfzerbrechen:
In einem Mixed-Mode-Assembly "A.dll" liegt die folgende (Wrapper-)Klasse:// MfcException.hpp #pragma once #include "CzException.hpp" public ref class MfcException : public System::Exception { public: MfcException(CzException* pException); };
Nun möchte ich gerne in einem zweiten Mixed-Mode-Assembly "B.dll" ein MfcException-Objekt erzeugen. Dazu füge ich "A.dll" als Referenz hinzu und inkludiere "MfcException.hpp". Leider führt das zu einer doppelten Klassen-Definition von "MfcException", denn die Klasse wird gleichzeitig über die DLL-Referenz (managed) und über das Header-Include (nativ) eingebunden.
Fällt jemandem eine Lösung dazu ein?
Freundliche Grüße
-- oXmoX
-
Du darfst nix incudieren!
Einfach nur die Referenz hinzufügen!
Du kannst keine Managed-Klasse über eine include-Datei einbinden! Und schon gar nicht "native"...
-
Jochen Kalmbach schrieb:
Einfach nur die Referenz hinzufügen!
Wenn ich das tue, hab ich doch keinen Zugriff mehr auf den Konstruktor, oder? Das Problem ist, dass der Konstruktor einen nativen Pointer enthält. Die einzige Lösung, die ich sehe ist, den Konstruktor abzuändern:
// MfcException.hpp #pragma once #include "CzException.hpp" public ref class MfcException : public System::Exception { public: MfcException(IntPtr exception); };
-
Das was Du machen sillst geht nicht.... oder zumindest nicht einfach!
Entweder Du verwendest *managed* Klassen, dann musst Du nur die Assembly referenzeiren!
Oder Du verwendest *native* Klassen, dann musst Du die LIB und h-Datei verwenden!
Beiden zusammen geht zwar auch, dann musst Du den Code entsprechend trennen...
Das würde ich Dir aber nicht raten, da dies vermutlich nur zu mehr verwirrung führt...
-
Jochen Kalmbach schrieb:
Beiden zusammen geht zwar auch, dann musst Du den Code entsprechend trennen...
Habe ich denn die Möglichkeit, eine NATIVE Methode aufzurufen, die in einer MANAGED Klasse einer anderen dll liegt?