编程中我遇到了一个动态编译的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");
}
你哪儿出错了?
testfn.h:
#pragma once
#include <windows.h>
typedef LONG (CALLBACK * LPFNDLLFUNC1)(LONG);
extern LPFNDLLFUNC1 fnInitModem;
testfn.cpp
#include "stdafx.h"
#include "testfn.h"
LPFNDLLFUNC1 fnInitModem = NULL;
main.cpp:
#include "stdafx.h"
#include "testfn.h"
int main()
{
//先初始化fnInitModem... LoadLibrary, GetProcAddress..
long l = fnInitModem(0);
return 0;
}
完全OK啊