在显式链接下,应用程序必须进行函数调用以在运行时显式加载  DLL。为显式链接到  DLL,应用程序必须:    
 
调用  LoadLibrary(或相似的函数)以加载  DLL  和获取模块句柄。    
调用  GetProcAddress,以获取指向应用程序要调用的每个导出函数的函数指针。由于应用程序是通过指针调用  DLL  的函数,编译器不生成外部引用,故无需与导入库链接。    
使用完  DLL  后调用  FreeLibrary。    
例如:  
 
typedef  UINT  (CALLBACK*  LPFNDLLFUNC1)(DWORD,UINT);  
...  
 
HINSTANCE  hDLL;                              //  Handle  to  DLL  
LPFNDLLFUNC1  lpfnDllFunc1;        //  Function  pointer  
DWORD  dwParam1;  
UINT    uParam2,  uReturnVal;  
 
hDLL  =  LoadLibrary(  "MyDLL  ");  
if  (hDLL  !=  NULL)  
{  
     lpfnDllFunc1  =  (LPFNDLLFUNC1)GetProcAddress(hDLL,  
                                                                                       "DLLFunc1  ");  
     if  (!lpfnDllFunc1)  
     {  
           //  handle  the  error  
           FreeLibrary(hDLL);                
           return  SOME_ERROR_CODE;  
     }  
     else  
     {  
           //  call  the  function  
           uReturnVal  =  lpfnDllFunc1(dwParam1,  uParam2);  
     }  
}  

解决方案 »

  1.   

    在显式链接下,应用程序必须进行函数调用以在运行时显式加载  DLL。为显式链接到  DLL,应用程序必须:    
     
    调用  LoadLibrary(或相似的函数)以加载  DLL  和获取模块句柄。    
    调用  GetProcAddress,以获取指向应用程序要调用的每个导出函数的函数指针。由于应用程序是通过指针调用  DLL  的函数,编译器不生成外部引用,故无需与导入库链接。    
    使用完  DLL  后调用  FreeLibrary。    
    例如:  
     
    typedef  UINT  (CALLBACK*  LPFNDLLFUNC1)(DWORD,UINT);  
    ...  
     
    HINSTANCE  hDLL;                              //  Handle  to  DLL  
    LPFNDLLFUNC1  lpfnDllFunc1;        //  Function  pointer  
    DWORD  dwParam1;  
    UINT    uParam2,  uReturnVal;  
     
    hDLL  =  LoadLibrary(  "MyDLL  ");  
    if  (hDLL  !=  NULL)  
    {  
         lpfnDllFunc1  =  (LPFNDLLFUNC1)GetProcAddress(hDLL,  
                                                                                           "DLLFunc1  ");  
         if  (!lpfnDllFunc1)  
         {  
               //  handle  the  error  
               FreeLibrary(hDLL);                
               return  SOME_ERROR_CODE;  
         }  
         else  
         {  
               //  call  the  function  
               uReturnVal  =  lpfnDllFunc1(dwParam1,  uParam2);  
         }  
    }  
      

  2.   

    在显式链接下,应用程序必须进行函数调用以在运行时显式加载  DLL。为显式链接到  DLL,应用程序必须:    
     
    调用  LoadLibrary(或相似的函数)以加载  DLL  和获取模块句柄。    
    调用  GetProcAddress,以获取指向应用程序要调用的每个导出函数的函数指针。由于应用程序是通过指针调用  DLL  的函数,编译器不生成外部引用,故无需与导入库链接。    
    使用完  DLL  后调用  FreeLibrary。    
    例如:  
     
    typedef  UINT  (CALLBACK*  LPFNDLLFUNC1)(DWORD,UINT);  
    ...  
     
    HINSTANCE  hDLL;                              //  Handle  to  DLL  
    LPFNDLLFUNC1  lpfnDllFunc1;        //  Function  pointer  
    DWORD  dwParam1;  
    UINT    uParam2,  uReturnVal;  
     
    hDLL  =  LoadLibrary(  "MyDLL  ");  
    if  (hDLL  !=  NULL)  
    {  
         lpfnDllFunc1  =  (LPFNDLLFUNC1)GetProcAddress(hDLL,  
                                                                                           "DLLFunc1  ");  
         if  (!lpfnDllFunc1)  
         {  
               //  handle  the  error  
               FreeLibrary(hDLL);                
               return  SOME_ERROR_CODE;  
         }  
         else  
         {  
               //  call  the  function  
               uReturnVal  =  lpfnDllFunc1(dwParam1,  uParam2);  
         }  
    }