#include "windows.h"
#ifdef C_CPP_DLL
#define MYDLL extern "C" _declspec (dllexport)
#else
#define MYDLL _declspec(dllexport)
#endifMYDLL void initok();
MYDLL void initok2();
MYDLL LPSTR initBUFFER();看看这样不如写文件好啦?怎么LoadLibrary后还要写函数原型出来?
#ifdef C_CPP_DLL
#define MYDLL extern "C" _declspec (dllexport)
#else
#define MYDLL _declspec(dllexport)
#endifMYDLL void initok();
MYDLL void initok2();
MYDLL LPSTR initBUFFER();看看这样不如写文件好啦?怎么LoadLibrary后还要写函数原型出来?
例如你的函数是 int MyFunc(int a);
那么类型声明就是 typedef int(*MyFuncProc)(int);
直接声明变量的话就去掉前面的typedef
只不过,用LoadLibrary时可以用哪个函数声明哪个函数,而用头文件的话是把所有能用的函数全声明了。
另外,如果使用的是COM组件,使用#import语句的话编译器会替你从组件中释放出类型库(如果有的话),这样就相当于已经有头文件了,就无需再自己写了
但是,我LoadLibrary之后,就用DLL里的这个函数initok(); 然后编译器说我没有定义这个函数。怎么回事?应该怎么用的?又要声明一次那个函数啊?或者是又要连接什么东东?
#pragma comment(lib,"my.dll")
hinstLib = LoadLibrary("C:\\testprog\\test.dll");
if(!hinstLib)
{
AfxMessageBox("err");
return FALSE;
}
typedef int ( *max11)(int i1,int i2,int i3);
max11 myMax;
myMax = (max11)GetProcAddress(hinstLib,"fun");
int iret = myMax(1,2,3);
是声明一个指针,该指针指向一个函数,该函数有一个整型参数并返回一个整型数;
如果是调用dll中带参数的函数应该这样定义吧
typedef void (FAR __cdecl *MyFuncProc)(int);
例子:
dll中
俄extern "c" __declspec(dllexport) int go (int i)
{
.......
}
调用
typedef int(FAR __cdecl *MyFuncProc)(int);HINSTANCE hDLL;
hDLL = LoadLibrary("**.dll");
if (hDLL != NULL)
{
MyFuncProc myproc;
myproc =(MyFuncProc)GetProcAddress(hDLL,"go");
if(myproc ==NULL)
{
AfxMessageBox("can't find function");
FreeLibrary(hDLL);
}
else
{
int ii=110;
int j=0;
j=myproc (ii);
FreeLibrary(hDLL);
}
}
myMax = (max11)GetProcAddress(DLLpath,"go ");