Ich weiß, in C++/CLI man kann nicht nicht verwalteten Typen verwenden, wenn eine verwaltete Klasse definieren:Warum kann eine nicht verwaltete Struktur kein Mitglied einer verwalteten Klasse sein?
public struct Unmanaged
{
int x;
int y;
};
public ref class Managed
{
int one;
Unmanaged two; //error C4368
};
Ich verstehe nicht, warum though. Unmanaged
ist einfach eine Sammlung von nativen Typen - seine Größe ist bekannt, sicherlich ist es (und damit meine ich den Speicherblock, der es definiert) würde mit dem 'Block des Speichers' bewegt werden, die Managed
innerhalb des 'verwalteten Heap' ist und welcher Offset in den Metadaten gespeichert wird, bleibt gültig, nein? So als ob eine ganze Zahl oder ein Float deklariert wäre?
Warum können wir nicht Typen mischen?
Wen erwarten Sie, eine solche Frage autoritativ beantworten zu können? – ildjarn
@ildjarn Nun, ich wollte nur den C++/CLI-Quellcode überprüfen und eine nette Antwort schreiben ... owait –
Ich fürchte, ich verstehe es nicht; jemand mit mehr Wissen über die Funktionsweise C++/CLI als ich? Bei der Gestaltung des Compilers muss jemand die gleiche Annahme haben, die ich in meinem Beitrag behaupte (oder die Annahme ist völlig falsch!), Und erkannte dann, dass es für eine Bedingung nicht wahr war, daher der Fehler - ich war nur neugierig was diese Bedingung war. In dem Blogpost, den Tony verlinkte, wurde erklärt, dass die Zuweisung von nativen Typen auf dem verwalteten Heap nicht erlaubt war, um Leute daran zu hindern, pin_ptr zu verwenden, um diese "Instanzen" in nicht verwalteten Code zurückzugeben. – sebf