我看了动态连接库的加载方式有隐和显:
extern "c" __declspec()typedef ....
HINSTANCE hin;
hin=::LoadLibrary("...dll");现在我看到在stdafx.h中这样加载dll文件这是个什么方式:
#ifdef _INSDBLIB_DLLAPI_
#define _INSDBLIB_DLLAPI_  __declspec(dllexport)
#else
#define _INSDBLIB_DLLAPI_  __declspec(dllimport)
#endif#ifndef _INSDBLIB_NOAUTOLIB_
#ifdef _DEBUG
#pragma comment(lib, "*.lib")
#else
#pragma comment(lib, "*.lib")
#endif
#endif请教上面加载的机理

解决方案 »

  1.   

    hin=::LoadLibrary("...dll");——显式加载
    #define _INSDBLIB_DLLAPI_  __declspec(dllexport)——确定导出还是导入
    #pragma comment(lib, "*.lib")——链接DLL的Lib库#ifdef _DEBUG——判断是否是Debug版本
      

  2.   

    这种加载机制是隐式链接,其原理是把目标Dll通过lib挂接到应用程序的输入节。
      

  3.   

    hin=::LoadLibrary("...dll"); 就是显示的加载
    然后就是一些导入导出的宏定义
    Debug版本的宏定义等
      

  4.   

    #ifdef _INSDBLIB_DLLAPI_
    #define _INSDBLIB_DLLAPI_  __declspec(dllexport)
    #else
    #define _INSDBLIB_DLLAPI_  __declspec(dllimport)
    #endif
    ---------------------------------------
    根据不同的需要确定是导出还是导入
      

  5.   

    #ifndef _INSDBLIB_NOAUTOLIB_
    #ifdef _DEBUG
    #pragma comment(lib, "*.lib")
    #else
    #pragma comment(lib, "*.lib")
    #endif
    #endif
    是隐式加载,在link的时候把DLL的lib库编译进去,在程序一开始执行的时候就会装载dll
    LoadLibrary是显式加载,在LoadLibrary时装载DLL
      

  6.   

    那是预编译处理,一般放在.H头文件里面,如果在DLL工程里面定义了_INSDBLIB_DLLAPI_,就默认定义_INSDBLIB_DLLAPI_为__declspec(dllexport) //导出
    而在调用DLL的工程里面包含了这个.H头文件的话,由于没有定义_INSDBLIB_DLLAPI_,所以就定义为__declspec(dllexport)
    因此,这个.H头文件既适合DLL端引用,又适合EXE端来调用DLL