如何动态调用DLL?
编程中我遇到了一个动态编译的DLL,没有.LIB 和.H
在APP中如下调用 ,可是我在其他类中如何使用这些函数呀?
//函数定义
typedef LONG (CALLBACK* LPFNDLLFUNC1)(LONG);
// 定义一个函数指针的类型 LPFNDLLFUNC1 , 这个类型是自己定义的,类型名为 LPFNDLLFUNC1
typedef LONG (CALLBACK* LPFNDLLFUNC2)(LONG);
typedef LONG (CALLBACK* LPFNDLLFUNC3)(LONG,CHAR *,CHAR *);
typedef LONG (CALLBACK* LPFNDLLFUNC4)(LONG,CHAR *,CHAR *);
typedef LONG (CALLBACK* LPFNDLLFUNC5)(LONG);
typedef LONG (CALLBACK* LPFNDLLFUNC6)();
HINSTANCE hInsDLL;
LPFNDLLFUNC1 fnInitModem; // Function pointer 1 这里利用自己定义的类型名LPFNDLLFUNC1定义了一个fnInitModem的函数指针!
LPFNDLLFUNC2 fnCloseModem; // Function pointer 2
LPFNDLLFUNC3 fnSendMsg; // Function pointer 3
LPFNDLLFUNC4 fnReadMsgEx; // Function pointer 4
LPFNDLLFUNC5 fnGetStatus; // Function pointer 5
LPFNDLLFUNC5 fnGetSndCount;
LPFNDLLFUNC5 fnGetRecCount;
LPFNDLLFUNC5 fnClrSndBuf;
LPFNDLLFUNC5 fnClrRecBuf;
LPFNDLLFUNC6 fnDogSerial;
//====------------------------------------------------
//取得函数地址
hInsDLL=LoadLibrary("MonDem");
if(hInsDLL==NULL){
ShowMessageNULL( IDS_LOADDLL_FAILED );
} else {
fnInitModem = (LPFNDLLFUNC1)GetProcAddress(hInsDLL,"fnInitModem");
fnCloseModem = (LPFNDLLFUNC2)GetProcAddress(hInsDLL,"fnCloseModem");
fnSendMsg = (LPFNDLLFUNC3)GetProcAddress(hInsDLL,"fnSendMsg");
fnReadMsgEx = (LPFNDLLFUNC4)GetProcAddress(hInsDLL,"fnReadMsgEx");
fnGetStatus = (LPFNDLLFUNC5)GetProcAddress(hInsDLL,"fnGetStatus");
fnGetSndCount = (LPFNDLLFUNC5)GetProcAddress(hInsDLL,"fnGetSndCount");
fnGetRecCount = (LPFNDLLFUNC5)GetProcAddress(hInsDLL,"fnGetRecCount");
fnClrSndBuf = (LPFNDLLFUNC5)GetProcAddress(hInsDLL,"fnClrSndBuf");
fnClrRecBuf = (LPFNDLLFUNC5)GetProcAddress(hInsDLL,"fnClrRecBuf");
fnDogSerial = (LPFNDLLFUNC6)GetProcAddress(hInsDLL,"fnDogSerial");
}