2011-10-28 20 views
3

/clr:pureスイッチは純粋なMSILを生成しますが、検証することはできません。このモードでは、ネイティブ配列とポインタを使用できます。これは、MSILにネイティブ配列とポインタを保持する構造体があることを意味しますか?はいの場合は、MSILのネイティブ配列とポインタをどのようにコードすることができますか?純粋なC++/CLIのMSIL

+0

あなたが使用することができます[ Reflector](http://www.reflector.net/)を使用して、生成されたアセンブリを逆コンパイルします。 –

+0

CまたはC++でコードを書くだけで、特別なものは必要ありません。標準準拠のC89またはC++ 03コードはすべてMSILに変換できます。 ildasm.exe –

答えて

4

はい、CILには、アンマネージポインタを表す型があります。それらは管理されたポインタ(C#のrefout、CILの&)と似ていますが、GCがそれらを無視し、ポインタで意味をなさない算術演算を行うことができます。

興味深いことに、ポインタタイプにはターゲットタイプに関する情報が含まれているため(例:int32*)、すべての算術演算はバイトベースです。一例として、

、以下のC++/CLI方法:それは(リフレクターによって報告されるように)ref class内だとき

void Bar(int *a) 
{ 
    a[5] = 15; 
} 

は、次のCILを生成します。

.method private hidebysig instance void Bar(int32* a) cil managed 
{ 
    .maxstack 2 
    L_0000: ldarg.1  // load the value of a pointer to the stack 
    L_0001: ldc.i4.s 20 // load the number 20 (= 4 * 5) to the stack 
    L_0003: add   // add 20 to the pointer 
    L_0004: ldc.i4.s 15 // load the number 15 to the stack 
    L_0006: stind.i4  // store the value of 15 at the computed address 
    L_0007: ret   // return from the method 
} 
+0

@ildjarnで見てみると、私は 'language-all'について知らなかった、このように教えてくれてありがとう。 – svick

関連する問題