我看了动态连接库的加载方式有隐和显:
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请教上面加载的机理
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请教上面加载的机理
#define _INSDBLIB_DLLAPI_ __declspec(dllexport)——确定导出还是导入
#pragma comment(lib, "*.lib")——链接DLL的Lib库#ifdef _DEBUG——判断是否是Debug版本
然后就是一些导入导出的宏定义
Debug版本的宏定义等
#define _INSDBLIB_DLLAPI_ __declspec(dllexport)
#else
#define _INSDBLIB_DLLAPI_ __declspec(dllimport)
#endif
---------------------------------------
根据不同的需要确定是导出还是导入
#ifdef _DEBUG
#pragma comment(lib, "*.lib")
#else
#pragma comment(lib, "*.lib")
#endif
#endif
是隐式加载,在link的时候把DLL的lib库编译进去,在程序一开始执行的时候就会装载dll
LoadLibrary是显式加载,在LoadLibrary时装载DLL
而在调用DLL的工程里面包含了这个.H头文件的话,由于没有定义_INSDBLIB_DLLAPI_,所以就定义为__declspec(dllexport)
因此,这个.H头文件既适合DLL端引用,又适合EXE端来调用DLL