|
장비를 제어하기 위해 받은 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 내의 함수를 호출할려면 어떻게 해야 하나요 ?
미리 감사를 드립니다. ^^
|