私はこのような構造合格しようとしています:は、構造が参照され、アクセス違反が発生し
#pragma managed
private class __gc GlobalFunctions
{
static void WriteField(Object* object, PARAMTER& par, unsigned dec)
{
switch (par.type)
{
....
}
}
};
:このクラスの静的メソッドに
#pragma unmanaged
typedef struct
{
void* data;
unsigned nlen;
unsigned int type;
} PARAMETER;
を
この関数から:64ビットシステムで
public class __gc WorkerClass
{
void SetValueAt(long index, Object* value)
{
PARAMETER aux;
aux.type = 3;
GlobalFunctions::WriteField(value, aux, 0);
}
};
、私はそれを言って、アクセス違反を取得アドレス「0x000c」は読み取れません。
64ビットシステムでは、parの参照がNULLポインタの場合、par.typeの参照解除は0x0cのアドレスになります。 parがスタック上にあることを除いて - 私はWriteFieldにヌルポインタを渡すわけではありませんが、私はそれを取得しているようです。別の静的メソッドに1つのマネージクラスのインスタンスメソッドから呼び出すとき
は今、マネージドC++で、私はマーシャリングの問題のいくつかの並べ替えに弱い参照によって管理されていない構造を渡しているという事実ですか?
管理されていない構造がマネージコードによってどのように処理されるかを説明するWebドキュメントはありますか?
#プラグマがすでに存在していたのを忘れてしまった。 – Eli