DLL 使用时,如果要由用户程序来加载,使用的就是动态加载DLL:
我是刚学DLL这部分内容,写了个比较简单的DLL,并使用此DLL,以下是使用DLL中导出函数的
#include
...<文件包含>
HMODULE hModuleDLL;
void main(int argc,char *argv[])
{ BOOL bIsFree;
FARPROC lpDLLfun;
printf("加载DLL\n");
hModuleDLL=LoadLibrary("dllLibry.dll");
if(hModuleDLL!=NULL)
printf("Load DLL成功!\n");
else
{
printf("Load DLL 失败!\n");
exit(0);
}
lpDLLfun=GetProcAddress(hModuleDLL,"fun2");
if(lpDLLfun!=NULL)
{ printf("使用导出函数入口地址进DLL中的调用\n");
(*lpDLLfun)(0,0);
printf("DLL使用成功!\n");
}
else
{ printf("DLL使用失败!\n");
printf("lpDLLfun=%d\n",lpDLLfun);
}
bIsFree=FreeLibrary(hModuleDLL);
if(bIsFree)
printf("DLL释放成功!\n");
}
程序中fun2()是我的dllLibry.dll中的函数,此程序能通过编译和连接(使用的是VC++6.0),但在运行的时候,出了以下错误,望高手能够指点(最好详细点,谢谢!)
////////////////////////////////////////////////////////////////////
错误信息:
Debug Error!
Program:F:\Debug\DLoadDLL.exe
Module:
File:i386\chkesp.c
Line:42
The value of ESP was not properly saved across a function call.
This is usually a result of calling a function declared with one calling
convention with a function pointer declared with a different calling convertion.
(Press Retry to debug the application)
//////////////////////////////////////////////////////////////
这先谢谢大家了~
--------------------------------------
我加了这两句(网上搜的):
typedef BOOL (_cdecl *FARPROC)(int x,int y); (1)
....
lpDLLfun=(FARPROC)GetProcAddress("****.dll","fun1");
后用lpDLLfun调用函数
(*lpDLLfun)=fun1(0,0);
编译连接后就不会跳出那错误信息了..
但小弟我还是不明白上面的第(1)句到底什么意思,望大牛们给我讲讲,谢谢!\n