1.添加一个 函数:
BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
2. 定义导入导出宏
#ifdef DLL_EXPORT_SIGN
#def SAM_API __declspec(dllexport)
#else
#def SAM_API __declspec(dllexport)
#endif
3.预定义宏 DLL_EXPORT_SING
#define DLL_EXPORT_SING
4.添加函数或变量:
//.h
extern "C"
{
SAM_API void Refresh();
}
//.cpp
SAM_API void Refresh()
{
//......
}
5.使用方法
a.使用.h配合.lib文件:
#include "***.h"
#pragma comment(lib,"***.lib")
将***.dll放在调用程序.exe的同一文件夹中
直接使用调用函数即可
b.只使用***.dll
typedef void (*pDllFunc)();
pDllFunc pfn = NULL;
HISTANCE hItan = LoadLibrary("***.dll");
if( hItan )
{
pfn = GetProcAddress(hItan,"Refresh");
if(pfn)
{
pfn();
}
FreeLibrary(hItan);
}
6.注意事项
如果头文件中没有 extern "C",导出的函数名将不再是 Refresh, 而是 ?Refresh@@YAXXZ类似这样的名称,这会导致
GetProcAddress(hItan,"Refresh")失败,GetLastError返回127错误代码。
7.使用模块定义文件导出
a>添加一个文件Refresh.def (注意后缀名是.def,不是.h或者.cpp,写错了就导不出来了)
b>添加内容:
LIBRARY Refresh;//一个名称
EXPORTS
Refresh @ 10//导出了Refresh函数
;行了
c>调用与上面类似,不过在显式调用时参数要变一下:
pfn = GetProcAddress(hItan,MAKEINTRESOURCE(10));