2009-07-28 8 views
0

私はこのような構造合格しようとしています:は、構造が参照され、アクセス違反が発生し

#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ドキュメントはありますか?

答えて

0

管理対象コードと未管理コードを明示的に管理対象/非管理対象としてコンパイルする必要があります。管理されたコードと管理されていないコードが同じファイルに混在している場合は、プラグマ管理とプラグマアンマネージドを使用する必要があります。また、インクルードファイルを使用するときは注意してください。

+0

#プラグマがすでに存在していたのを忘れてしまった。 – Eli

関連する問題