C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[36481] Re:Re:Visual C용 DLL을 빌더에 동적 연결
김성연 [sykim25] 1505 읽음    2004-07-26 09:11
: : 받은 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에서 제대로 테스트 해봐서 성공한 다음 빌더에서 해도 됩니다.

그럼 열심히 삽질하시길 .. -_-;;

+ -

관련 글 리스트
36453 Visual C용 DLL을 빌더에 동적 연결 하느리 1026 2004/07/23
36456     Re:Visual C용 DLL을 빌더에 동적 연결 정재만 1497 2004/07/23
36481         Re:Re:Visual C용 DLL을 빌더에 동적 연결 김성연 1505 2004/07/26
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.