dll 참조에 대해 질문 하나만 더 올리겠습니다.

[DllImport] 를 사용할 때요.

예를 들어 메세지 박스에 대한 부분을 User32.dll에서 가져와서 사용하고 싶으면 밑에와 같이 표현해서 사용한다는 거잖아요.

[DllImport(“User32.dll”)]
public static extern int MessageBox(int hParent, string Message, string Caption, int Type);

그런데 해당 dll에 어떤 함수가 있는지 알 수 있는 방법은 없을까요? 어떤 함수가 있고 어떤 매개변수가 필요한지 알아야 사용을 할 텐데 DllImport의 경우 어떻게 그걸 알고 다들 사용하시는지 궁금하더라고요.

이때까진 그냥 열심히 검색해서 남들 예시를 보고 사용했지만 이젠 알아야 될꺼 같아서요. 다들 어디서 dll 에 대한 정보를 알고 사용하시나요?

1 Like

Win32 API를 쓰는 겁니다. Windows 시스템의 기본 dll의 함수를 호출하는거죠.
자세한 사항은 아래 링크를 참고해보세요

http://www.soen.kr/

http://www.soen.kr/lecture/win32api/reference/reference.htm

2 Likes

C용으로 만들어진 DLL 역시 헤더 파일 및 API 설명서가 없으면 사용할 수 없습니다.

아마도,

이 글에서 말씀주신 해당 dll을 사용하기 위한 것이 목적이실 텐데, 관련 사이트에서 C의 헤더나 정확한 함수의 호출 정보를 획득해야만 합니다.

3 Likes

물론 API 사용 설명서가 있어야 겠지만… 어쨌든 xxx.h 형태의 헤더 파일이 있어야만 그 헤더파일을 분석해서 P/Invoke를 쓸 수 있습니다.

(그런데 사이트를 아무리 둘러봐도 dll을 API로 제공되는 것 같지 않군요)

2 Likes

사이트에서 API 정보를 구하거나 사이트 담당자에게 해당 API 문서, .NET 용 래핑 라이브러리를 얻지 못한다면 마지막 수단으로 exe파일을 역컴파일 해서 P/invoke 부분을 살펴볼 수 도 있겠습니다. (제가 직접 역컴파일 해보지는 않았지만 FlyPT Mover.exe 파일은 .NET Framework으로 컴파일된 실행파일로 보입니다)

2 Likes

정말 너무나 도움이 되는 부분이네요. 감사합니다. 덕분에 많은 걸 알아가요.
정말 정말 감사합니다. 역컴파일도 해본적은 없지만 이참에 한번 알아보고 해야겠네요. 정말 감사합니다.

1 Like

아래 프로그램이 무료이니 이 프로그램을 이용하시면

dotPeek: JetBrains가 만든 무료 .NET 디컴파일러 및 어셈블리 브라우저

컴파일까지 되지는 않지만 거의 대부분의 소스코드로 디컴파일 되는 것을 확인했습니다.

3 Likes

안타깝게도 원하는 dll은 c#으로 만들어진게 아닌가 보네요. 알려주신 프로그램으로 디컴파일 시켰지만 열리지 않는 것 같습니다. 그래도 유익한 프로그램 하나 알게되어 정말 도움이 되네요. 감사합니다.

1 Like

원하시는 DLL은 .NET용이 아닙니다. 그 DLL을 FlyPT Mover.exe에서 사용할 것이고 FlyPT Mover.exe는 .NET Framework으로 만들어진 실행파일이므로 dotPeek으로 디컴파일 됩니다. 디컴파일한 소스코드에서 원하시는 DLL을 호출하는 부분을 참조해서 P/Invoke 구성을 할 수 있다는 의미였습니다.

다만 디컴파일이 되는것까지만 확인했고 해당 DLL을 어떻게 호출했는지 코드를 확인하지는 않았습니다. 그리고 어쨌든 DLL에 대한 API 개발자 메뉴얼이 없으므로 원하시는 골까지 가기가 만만치 않을 수 있겠습니다.

2 Likes

넵 무슨 말씀이신지 이해는 되었으나 저도 원하는 부분까지는 많이 어렵다 느껴서 차라리 다른 방법은 없나 현재 모색 중 입니다. 그래도 덕분에 정말 감사드리네요. 닷넷용 DLL 이 아니라는 그 사실을 알게 된 것 만으로도 큰 수확입니다. 다시 한번 감사합니다.

2 Likes