http://blogs.msdn.com/vcblog/archive/2008/12/08/inheriting-from-a-native-c-class-in-c.aspx

내가 이런 엄청난 - 미친 일을 했다는 건 아니고, 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.

DLL에서 export된 놈들 리스트를 뽑는건 간단하겠고, mangled name은 호출 규약, 이름, 반환 타입, 매개변수를 포함한 유효 정보를 포함하니, 툴 하나 만들면 (DLL에 담긴 class의 노출된 정보를) 얻어낼 수 있겠지. 게다가 PDB까지 갖는다면 data member와 structure 구조 등 까지 얻어낼 수 있겠고.
달리 말하자면, 위의 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 제작도 흥미를 끄는 부분이 되겠다는 생각. 그놈 하나 제작을 통해 얻는 것이 꽤 되겠네~ 언제 여유좀 부려보려나... 하~
Posted by 어쨌건간에

댓글을 달아 주세요