2009-07-28 2 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의 주소가됩니다. 파가 스택 상에있는 것을 제외하고 - 나는 널 포인터를 WriteField에 전달하지 않을 것이지만 나는 하나를 꺼내는 것 같다.

Managed C++에서 하나의 관리되는 클래스 인스턴스 메서드를 다른 정적 메서드로 호출 할 때 구조체를 비 정렬 마샬링 문제에 취약하게 전달한다는 사실이 무엇입니까?

관리되지 않는 구조가 관리되는 코드로 처리되는 방법을 설명하는 웹 설명서가 있습니까?

답변

0

관리되는 코드와 관리되지 않는 코드를 관리되는/관리되지 않는 것으로 명시 적으로 컴파일해야합니다. 관리되는 코드와 관리되지 않는 코드가 같은 파일에 혼합되어 있으면 pragma managed 및 pragma unmanaged를 사용해야합니다. 또한 include 파일을 사용할 때 명심하십시오.

+0

#pragma 's가 이미 존재한다는 것을 잊어 버렸습니다. – Eli

관련 문제