Ich versuche, diese Struktur zu übergeben:eine nicht verwaltete C++ Struktur unter Bezugnahme auf ein verwaltetes C++ Methode Passing verursacht eine Zugriffsverletzung, wenn die Struktur
#pragma unmanaged
typedef struct
{
void* data;
unsigned nlen;
unsigned int type;
} PARAMETER;
Hierher statische Methode:
#pragma managed
private class __gc GlobalFunctions
{
static void WriteField(Object* object, PARAMTER& par, unsigned dec)
{
switch (par.type)
{
....
}
}
};
Aus dieser Funktion:
public class __gc WorkerClass
{
void SetValueAt(long index, Object* value)
{
PARAMETER aux;
aux.type = 3;
GlobalFunctions::WriteField(value, aux, 0);
}
};
Auf einem 64-Bit-System, erhalte ich eine Verletzung Zugang zu sagen, dass Die Adresse '0x000c' kann nicht gelesen werden.
Jetzt, auf einem 64-Bit-System, wäre die Dereferenzierung von par.type die Adresse von 0x0c, wenn die Referenz von par ein Nullzeiger wäre. Außer Par ist auf dem Stapel - ich gebe keinen Null-Zeiger in WriteField, aber ich scheine einen zu bekommen.
Jetzt, in verwalteten C++, beim Aufruf von einer verwalteten Klasseninstanz Methode zu einer anderen statischen Methode, ist die Tatsache, dass ich eine unmanaged Struktur übergeben anfällig für eine Art Marshalling-Problem?
Gibt es eine Webdokumentation, in der erklärt wird, wie nicht verwaltete Strukturen mit verwaltetem Code behandelt werden?
Vergessen zu spezifizieren, dass - die # Pragma's schon da waren. – Eli