DLL的加载

来源:互联网 发布:java入门到放弃 编辑:程序博客网 时间:2024/05/10 23:58
DLL的使用分为两种,静态导入和动态导入DLL。其中整个类的导入常采用  
  静态的导入方法;而函数或方法的导入通常采用动态的导入方法。  
  一.静态使用  
  导入类的声明:  
 1.DLL工程的声明最好为扩展MFC类型;  
  2.在DLL中有以下类声明  
  //MyClass.h  
  class   AFX_EXT_CLASS   CMyClass  
  {  
  ............  
   
  };  
 3.在使用DLL的类的工程中,需要以下配置  
  A.在Project|Setting中的Link标签页的Object/library   Modules   中加入*.lib  
  B.在Tools|Options中的Directories   标签页中的   Show   directories   for:下面的  
      Include   files   中增加Myclass.h的路径;Lib   files中增加*.lib   和*.dll路径。  
  C.在使用工程的代码中如下即可:  
  #include   "MyClass.h"  
  ......  
  CMyClass   MyClass;  
  二.动态使用  
  动态使用DLL有个前提条件,必须知道DLL中的待引用函数名,配置必须有静态使用中的B项。  
  使用如下:  
  HINSTANCE               g_hSmppDll               =   NULL;  
  typedef   UINT     MyFunc(char   *);               //DLL中的函数  
  MyFunc     *pMyFunc=NULL;  
  g_hSmppDll   =LoadLibrary("MyDll.dll");    
  ASSERT(g_hSmppDll   );  
  pMyFunc=(MyFunc   *)(GetProcAddress(   g_hSmppDll,   "MyFunc"));//引号中为DLL中的函数名  
  (*pMyFunc)   ("ok");          
   
  在于一个*.lib文件。在编译动态链接库时,VC++会为动态链接库创建一个引入  
  库(IMPORT   LIB),即*.lib。库文件中只包含一些指向外部DLL库的函数索引指针,而  
  不是真正的代码,用于解析DLL的加载地址,并定义动态链接库和用于声明的头文件  
  的完全路径名。然后为引入库定义一个头文件,用来声明DLL中的函数。开发人员在引用时,  
  要配置如下:  
  A.在Project|Setting中的Link标签页的Object/library   Modules   中加入*.lib  
  B.在Tools|Options中的Directories   标签页中的   Show   directories   for:下面的  
      Include   files   中增加Myclass.h的路径;Lib   files中增加*.lib   和*.dll路径。  
 这是一种常用的方法。实际上,应用程序就是通过这种方式来访问Windows   的API函数。  
  WINDOWS为其内核动态链接库生成引入库并提供了头文件。应用程序在编译时将引入  
 库的信息带入可执行文件中,运行时通过引入库信息访问API函数。
原创粉丝点击