티스토리 뷰

배열 및 문자열이 포함된 구조체를 마샬링 하기 위해서는 MarshalAsAttribute 특성을 사용하여 포함된 문자열 및 배열을 마샬링 하는 방법을 지정해야한다. 그렇지 않으면 예외가 발생된다. (마샬링 하는 부분은 예외처리가 되어야한다!)

마샬링할 데이터비관리 구조체 (C++)

관리 구조체 (C#)

정수 배열
  1. struct MyStruct    
  2. {    
  3.    int intArray[10];    
  4. };   
  1. struct MyStruct    
  2. {    
  3.    [MarshalAsAttribute(    
  4.     UnManagedType.ByValArray,    
  5.     SizeConst = 10)]    
  6.    int[] intArray;    
  7. }   

 문자 배열
  1. struct MyStruct    
  2. {    
  3.    char charArray[10];    
  4. };   
  1.   
  2. struct MyStruct    
  3. {    
  4.    [MarshalAsAttribute(    
  5.     UnManagedType.ByValArray,    
  6.     SizeConst = 10)]    
  7.    char[] charArray;    
  8. }   

문자열의 문자배열
  1. struct MyStruct    
  2. {    
  3.    char charArray[10];    
  4. };   
  1. struct MyStruct    
  2. {    
  3.    [MarshalAsAttribute(    
  4.     UnManagedType.ByValTStr,    
  5.     SizeConst = 10)]    
  6.    String str;    
  7. }   

문자열의 포인터
  1. struct MyStruct    
  2. {    
  3.    wchar_t* pStr;    
  4. };   
  1. struct MyStruct    
  2. {    
  3.    [MarshalAsAttribute(    
  4.     UnManagedType.LPWStr)]    
  5.    String str;    
  6. }   


 문자열을 wchar_t* 로 마샬링할때는 유니코드 문자열에 대한 포인터로 마샬링하는 아래 두가지 특성 중 하나를 선택할 수 있다.

. [MarshalAs(UnmanagedType.LPWStr)]

. [MarshalAs(UnmanagedType.LPTStr)]


 구조체 레이아웃 지정

    StructLayoutAttribute 특성을 사용하여 플랫폼 호출 마샬러에 대한 구조체의 레이아웃을 설정할 수 있다. (LayoutKind 열거형을 사용)


  • Auto        : 런타임에서 자동으로 관리되지 않는 메모리에 있는 개체의 멤버에 적합한 레이아웃을 선택한다. 이 열거형 멤버로 정의된 개체는 관리코드 외부에 노출할 수 없다. 노출시 예외가 발생한다.
  • Explicit    : 관리되지 않는 메모리에 있는 개체의 멤버에 대한 정확한 위치는 명시적으로 제어된다. 각 멤버는 System.Runtime.InteropServices.FieldOffsetAttribute 를 사용하여 형식 내부의 필드위치를 나타내야한다.
  • Sequential   : 개체의 멤버는 관리되지 않는 메모리로 내보낼때 표시되는 순서대로 배치된다. 멤버는 System.Runtime.InteropServices.StructLayoutAttribute.Pack 에 지정된 방식에 따라 배치되며, 연속되지 않을 수 있다.

http://blog.naver.com/PostView.nhn?blogId=ctpoyou&logNo=111546774

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2026/04   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30
글 보관함