私はこの構造を渡そうとしています:
#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 の参照がヌル ポインターである場合、par.type の逆参照は 0x0c のアドレスになります。par がスタック上にあることを除いて、null ポインターを WriteField に渡していませんが、1 つ取得しているようです。
さて、マネージ C++ で、あるマネージ クラス インスタンス メソッドから別の静的メソッドを呼び出す場合、参照によってアンマネージ構造を渡しているという事実は、ある種のマーシャリングの問題に対して脆弱ですか?
管理されていない構造が管理されたコードによってどのように扱われるかを説明する Web ドキュメントはありますか?