2011-10-28 3 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