Wie der Titel schon sagt möchte ich einen nicht verwalteten Typ als Member einer verwalteten Klasse definieren.
Konkret geht es um die ID3D11Buffer Struktur aus der DirectX API.
ref class MyObject
{
public:
ID3D11Buffer MyBuffer; // Funktioniert nicht
}
Visual Studio sagt mir aber dass das nicht funktioniert.
In einem nicht von mir geschriebenen Projekt, wird hierfür folgendes verwendet.
Microsoft::WRL::ComPtr<ID3D11Buffer> MyBuffer;
Das wäre im Endeffekt genau das was ich brauche, nur ist diese Vorgehensweise
mit der Common Language Runtime wieder nicht kompatibel.
Gibt es irgend eine Alternative zur obigen Lösung, die auch unter der Common Language Runtime
funktioniert?
nun, deine Frage ist nicht wirklich C++, denn in Standard C++ gibt es kein ref Keyword (es gibt ganz im Gegenteil dazu eine Hilfsfunktion mit demselben Namen). Das gibt es nur in dem Gefriemel von Microschrott.
Aber Gegenfrage: Hast du mal eine der Standard Smart Pointer Klassen in deiner Klasse verwendet, zum Beispiel std::auto_ptr (C++98) oder std::shared_ptr (C++11)?
Gruss
HH
PS auto_ptr und shared_ptr tun nicht dasselbe! Das waren nur Beispiele.
So bekomm ich zumindest schon mal keine Fehlermeldung, was ich zwar nicht ganz verstehe
Weil ja die ID3D11Buffer-Struktur ja eigentlich auch ein nicht-verwalteter Typ ist.
ja, aber so erhältst du neben der Verletzung nahezu fast aller Coding Richtlinien auch ein Problem, sollte dieses Objekt mal einem anderen zugewiesen werden, mal davon abgesehen, dass Ein_Buffer natürlich gar nicht initialisiert ist .
Der Buffer wird dann sowieso im Konstruktor erzeugt, ich hab den Code dafür nur weggelassen,
weil der doch einige Zeilen einnimmt, und hier eigentlich nichts zur Sache tut. Hätte ich vielleicht
als Kommentar schreiben können, sry
Wenn ich den std::shared_ptr verwende, bekomm ich die selbe Meldung wie bei allen anderen auch:
Error: a member of a managed class cannot be of a non-managed class type