다음을 통해 공유


C# 에서 windows API 쓸수 있는 방법 도와 주는 사이트

웹에 가끔 질문을 올리시는 분들이 계셔서 모르시는 분들에게 도움이 될까 해서 올립니다. 아시다 시피 .NET은 COM 도 지원하지만 그냥 DLL을 직접 콜 하는 방식도 지원합니다. 이걸 PInvoke라고 하지요. 근데 이 PInvoke 이 사용하기가 조금 까다롭습니다. COM처럼 TLB가 있어서 상호간의 마샬이나 콜 방법을 도와 주는것이 있는것도 아니고, 따라서 자동으로 .NET wrapper을 만들어 주는 툴이 있는것도 아니고, 사용하는 사람이 직접 맞는 맵핑을 찾아야 하죠. 완전 시간 허비하며 이리저리 맞을때 까지 해봐야 하는게 일반적 입니다. 물론 spec을 보면 장황한 설명이 있습니다. win32의 경우는 특히 natvie 무슨 타입 형식이 .NET의 무슨 타입과 1:1 대응이 되며, 메모리 structure는 어찌 지정해야 되고 어쩌고 저쩌고. 그걸 다 외우면 기계적으로 맵핑이 다 될꺼 같은데... 아닙니다 . ㅡ.ㅡ.

 

하여간 그래서, 사람들이 모여서 그 정보를 모아 놓는 곳이 있습니다.

https://www.pinvoke.net 입니다.

 

여기 가셔서 찾으시는 win32 함수 이름을 맨위 search 박스에 넣고 찾으시면 거의 90% 찾으실수 있을 껍니다. 그 함수를 dllimport 하는 방법 부터, memory structure는 어떻게 해 줘야 하고 marshal 은 어떤 형식으로 해줘야 하는지 또 parameter로 사용되는 타입은 어떻게 지정해야 하는지 등등...

 

도움이 되셨으면 좋겠습니다.

 

수고

- 희제