Я пытаюсь передать эту структуру:
#pragma unmanaged
typedef struct
{
void* data;
unsigned nlen;
unsigned int type;
} PARAMETER;
К статическому методу этого класса:
#pragma managed
private class __gc GlobalFunctions
{
static void WriteField(Object* object, PARAMTER& par, unsigned dec)
{
switch (par.type)
{
....
}
}
};
Из этой функции:
public class __gc WorkerClass
{
void SetValueAt(long index, Object* value)
{
PARAMETER aux;
aux.type = 3;
GlobalFunctions::WriteField(value, aux, 0);
}
};
В 64-битной системе я получаю сообщение о нарушении прав доступа, в котором говорится, что адрес «0x000c» не может быть прочитан.
Теперь в 64-битной системе разыменование par.type было бы адресом 0x0c, если бы ссылка на par была нулевым указателем. За исключением того, что par находится в стеке - я не передаю нулевой указатель в WriteField, но, похоже, я получаю его.
Теперь, в Managed C ++, при вызове из одного метода экземпляра управляемого класса к другому статическому методу, является ли тот факт, что я передаю неуправляемую структуру по ссылке, уязвимой для какой-то проблемы маршаллинга?
Есть ли какая-либо веб-документация, объясняющая, как неуправляемые структуры обрабатываются управляемым кодом?