title: "**C#에서 Native C++ 클래스 상속**"
description: "**C#에서 Native C++ 클래스 상속**"
cleanUrl: /sw-engineer/cross-inheritance-csharp-cpp
ogImage: ""
floatFirstTOC: right
내가 이런 엄청난 - 미친 일을 했다는 건 아니고, ATL Internals의 Jim Springfield가 했다는 말이다. 아래는 그의 컬럼이 담긴 링크이다.
금년 한해 동안 내가 만지작거린 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.