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

[DllImport] 를 사용할 때요.

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

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

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

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

1개의 좋아요

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

http://www.soen.kr/

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

2개의 좋아요

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

아마도,

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

3개의 좋아요

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

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

2개의 좋아요

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

2개의 좋아요

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

1개의 좋아요

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

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

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

3개의 좋아요

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

1개의 좋아요

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

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

2개의 좋아요

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

2개의 좋아요