posted by 방랑군 2012. 1. 21. 22:36

출처 :  http://jafm00n.tistory.com/40 

비관리 코드의 함수를 호출하기 위한, P/Invoke, 내보낸 함수의 프로토 타입을 정의할때면 매개변수로 넘겨 지거나 반환값으로 넘어오는 자료형들이 관리 코드의 자료형과 어울리지 않아 다소 혼란 스럽다. 그래서  플랫폼 호출 데이터 형식 에 맞게 자료형(LPTSTR의 경우 System.String으로)을 대입시켜 줘야 한다.

   그러나 그 외의 구조체, 구조체 포인터, 배열, 문자열의 다양한 형태등은 어떻게 대입시켜야 하는가? 이러한 형식들에 대해서는 특성과 자료형으로 잘 정리하여 적절한 구조를 만들어 대입시켜야 한다. 이러한 작업을 마샬링이라고 한다. 마샬링이라는 문자에 대한 이해 보다는 직접 코딩을 해서 그 자체를 이해 하는 것이 바람직하다고 생각한다.

  또한 비관리 코드로 전달되는 매개 변수에 대한 (In 혹은 Out과 같은) 방향 특성에 대한 설정은 어떻게 해야 하는지 고민해 봐야 할 것이다. 이에 대해서는 방향 특성을 참고 하기 바란다.
 

값으로

 

결과로

 

참조로

 

구조체에서 값으로

 

구조체에서 참조로(char*)

 

구조체에서 참조로(char[])

 

클래스에서 값으로(char*)

 

클래스에서 값으로(char[])

 

윽... 잠이 와서 도저히 못쓰겠다.{=,.=} ㅋ 공란은 내일 쓰기로 하고 ... 이만 자야 겠다.(2009-07-08 AM 3:24)

  ㅋㅋ 포스트를 쓰는데 장장 3일이 걸린것 같다. 나름 깔끔하게 정리하려고 노력 하였으나 지루해지고 고단해 지고 나른한 관계로 중간 중간에 무의 불 성실 하게 글을 올린 듯 하지만 ㅡㅡ;; 이렇게 까지 한 나 자신의 노고를 스스로 치하하는 바이다~ 끝~ (2009-07-09 PM 5:50)

------------------------------------------------------------------------------------------------------
 각주::=

  1. 문자열을 반복적으로 수정해야 하는 경우-루프 작업과 같은- String개체는 계속되는 새로 만드는 작업으로 인해 오버해드가 클 수 있다. 이를 대처하여 사용할 수 있는 것이 StringBuilder라고 한다. 또한 방향 특성이 다른 참조 타입 형식과는 달리 기본적으로 [in/out] 특성을 갖는다. 자세한 사항은 MSDN참조 [본문으로]
  2. MSDN: 문자열에 대한 기본 마샬링 [본문으로]