|
: : 받은 DLL의 헤더파일은
: : class __declspec(dllimport) ABC_SDK {
: : public:
: : long InitDriver(short * pnBoards, char * strDLL, char * strDriver);
: : ....
: : };
: : long (__stdcall *InitDriver) (short * pnBoards, char * strDLL, char * strDriver); // 함수포인터 정의
: : InitDriver= (long (__stdcall*)(short*, char*, char*)) GetProcAddress (mh_DLLInstance, "ABC_SDK::InitializeDriver"); // dll 내의 ABC_SDK::InitializeDriver함수의 주소번지 찾기
: : 이렇게 하면 되는 것으로 알고 있는데, InitDriver가 NULL이 됩니다. 즉 해당 함수를 찾지 못했다고 나오는 것이죠. "ABC_SDK::InitializeDriver" 이부분이 잘못된 것 같은데.....
정말 허접하지만 약간 도움이 되실까 답변드립니다.
받으신 헤더가 맨 위의 것이 맞다면 함수를 찾을 때에 export 된 이름으로 찾으셔야죠.
InitDriver 로 찾으셔야지 InitializeDriver 는 잘못되었다고 생각합니다.
그리고 저는 클래스의 함수를 가져오는 것은 해보지 않아서 모르겠네요. 죄송..
그리고 함수 포인터 선언도 잘못 되었다고 생각합니다.
long (__stdcall ABC_SDK::*InitDriver) (short * pnBoards, char * strDLL, char * strDriver);
저도 잘 기억은 안나지만 해당 클래스의 메서드임을 명시해주어야 하죠.
그리고 export 때 __stdcall 을 안 해주었는데, 여기서 직접 __stdcall 을 임의로 넣어주시는 게
맞는지 잘 기억이 안나네요. DLL 안의 함수가 __stdcall 이 아니라면 함수포인터 선언시 __stdcall 을
안넣어주시는 게 맞을 듯 합니다.
게다가 클래스라면 해당 클래스의 헤더를 인클루드 해야한다고 알고 있습니다. 아닐수도 있고요 ^^;;
우선 VC에서 제대로 테스트 해봐서 성공한 다음 빌더에서 해도 됩니다.
그럼 열심히 삽질하시길 .. -_-;;
|