title: "**C#에서 Native C++ 클래스 상속**"
description: "**C#에서 Native C++ 클래스 상속**"
cleanUrl: /sw-engineer/cross-inheritance-csharp-cpp
ogImage: ""
floatFirstTOC: right

내가 이런 엄청난 - 미친 일을 했다는 건 아니고, ATL Internals의 Jim Springfield가 했다는 말이다. 아래는 그의 컬럼이 담긴 링크이다.

C++ Team Blog

금년 한해 동안 내가 만지작거린 MS 기술을 요약하자면, WPF + Interop(via P/Invoke, C++/CLI)이 되겠는데, P/Invoke의 극단을 보여준 위 컬럼이 흥미를 끌어서리.

잠시 보면 알겠지만, metadata 떡칠로 일관하는데, 그 떡칠을 실제 프로젝트에 적용하는 건 미친 짓이나 다름없다. 그럼 그가 과연 미쳤기 때문에 이와 같은 일을 벌렸느냐? 천만에. 모든 위대한 이론이 처음 튀어나왔을 때는 정리되지 않은, 지저분하기 짝이 없지만, 이를 정리하고 다시 바라보면 그 응용에서 엄청난 놀라움을 발견할 수 있듯이, 본 컬럼 역시 potential을 한웅큼 쥐고 있는 컬럼이다. 아예 컬럼 막판에 그 자신이 이를 잠시 설명한다.

...It is easy to get a list of exports from the DLL, and the mangled names encapsulate a good bit of information including calling convention, name, return type, parameters.  I could probably write a tool to generate this.  And if I have the PDB, I could get the structure of the class including data members, structure packing, etc.

달리 말하자면, 위의 metadata를 통한 삽질에는 유효 절차가 존재하므로 도구를 통해 전부 자동화할 수 있다는 뜻이며, 결국 삽질을 안해도 된다는 말씀.

두 번째 potential은 C++/CLI 내부가 어찌 돌아가는지의 그 원리를 간접 확인할 수 있다는 점이겠다(C++/CLI을 위 컬럼 관점에서 다시 정의하자면 위 엄청난 metadata의 추상물이 되겠지?).

마지막으로, 예전에 Hub Sutter 왈, 차기 버전의 C++/CLI는 native C++ class와 managed C++ class 간에 교차 상속을 지원할 것이라 했는데, 위 컬럼을 통해 어떻게 가능한지를 알아볼 수 있겠다.

p.s.

  1. 이 뿐만은 아니고, 그 역시 위 Visual C++ blog에 뭔 컬럼을 올려야 한다는 모종의 압박감에 잠못이루다 겨우 올린 것이 본 컬럼이 아니었는지 하는 생각도 살짝~ ㅋ
  2. 위 dll parser 제작도 흥미를 끄는 부분이 되겠다는 생각. 그놈 하나 제작을 통해 얻는 것이 꽤 되겠네~ 언제 여유좀 부려보려나... 하~