1. Dll 파일을 만들때는 가급적 __cdecl 형식으로 컴파일 해야 된다.
__cdecl 은 컴파일시 함수의 이름이 바뀌는 naming 규칙 중 하나로써, __stdcall 및 __fastcall 도 있다.
만약, LoadLibrary 계열의 함수를 사용할 경우 __cdecl 이라는 형식으로 컴파일이 되어 있지 않은 경우
GetProcAddress() 함수에서 찾아낼 함수의 이름을 다르게 해줘야 한다.
예를들어 작성한 함수의 이름이 test() 이라고 한다면
__cdecl 은 test
__stdcall 은 _test@숫자
__fastcall 은 @test@숫자
이렇게 저장되어 있을 것이다.
따라서 GetProcAddress 에서 __cdecl 사용시에는 "test" 라고 호출하면 되지만
__stdcall 에서는 "_test@숫자" 이렇게 바뀐 함수명을 호출해야 제대로 검색 할 것이다.
반면에 LoadLibrary 함수를 사용하지 않고 "foo.lib" 파일을 사용해서 컴파일시 linking 을 한다면
반드시 __cdecl 형식으로 해야 한다. 그래야 linking 시 함수명을 제대로 찾아서 올바르게 linking 할 수 있기 때문이다.
p.s. : exe 파일이나 dll 및 lib 파일에서 만들어진 외부에 연결되도록 한 함수명을 보고 싶으면 "dumpbin /exports" 를 사용하고
자기가 사용하는 함수명을 보고 싶으면 "dumpbin /import!s" 를 하면 된다.
p.s. : 일반 cmd 창을 띄우면 dumpbin 명령이 안 먹힐 것이다. 이는 Visual Studio Command Prompt 로 만들어진 cmd 창에서
실행시켜야 한다.