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
[36453] Visual C용 DLL을 빌더에 동적 연결
하느리 [handebug] 1025 읽음    2004-07-23 17:57
장비를 제어하기 위해 받은 DLL이 visual C로 제작이 된 DLL, Lib를 포함하고 있고, 빌더용은 따로 없는 상황입니다.
그래서 우선적으로 빌더용 lib를 만들기 위해, ImpLib.exe를 이용하여 lib를 만들고, 정적연결을 해 보았으나 실패하였습니다. 그래서 동적연결을 시도해 보려 하는데, 잘 안되네요.

받은 DLL의 헤더파일은
class __declspec(dllimport) ABC_SDK {
public:
    long InitializeDriver (short * pnBoards, char * strDLL, char * strDriver);
    ....
};
이렇게 클래스로 제작되어 있습니다. (라이센스때문에 헤더파일을 직접 보여드리지 못하여 죄송합니다.)

이것을 동적연결을 할려면,
제가 알고 있기로는,
    long (__stdcall *InitDriver) (short * pnBoards, char * strDLL, char * strDriver);  // 함수포인터 정의
    HANDLE mh_DLLInstance = LoadLibrary ("ABC_SDK.dll"); // load dll
    if ( mh_DLLInstance )
    {
        InitDriver= (long (__stdcall*)(short*, char*, char*)) GetProcAddress (mh_DLLInstance, "ABC_SDK::InitializeDriver"); // dll 내의 ABC_SDK::InitializeDriver함수의 주소번지 찾기
        if ( InitDriver )
        {
            short board;
            char s_dll [256];
            char s_driver [256];
            long r = InitDriver (&board, s_dll, s_driver); // dll 내의 함수 실행
            ....
        }
    }

    if ( mh_DLLInstance )   FreeLibrary (mh_DLLInstance);

이렇게 하면 되는 것으로 알고 있는데, InitDriver가 NULL이 됩니다. 즉 해당 함수를 찾지 못했다고 나오는 것이죠. "ABC_SDK::InitializeDriver" 이부분이 잘못된 것 같은데.....

정상적으로 dll 내의 함수를 호출할려면 어떻게 해야 하나요 ?
미리 감사를 드립니다. ^^

+ -

관련 글 리스트
36453 Visual C용 DLL을 빌더에 동적 연결 하느리 1025 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.