声明导出函数:
.h导出:
extern "C" datatype __declspec(dllexport) function(parameter_list);
.def导出:
; lib.def 导出DLL函数
LIBRARY __EXPORT_DLL_NAME__
EXPORTS
Fun_Name @ idx
.def文件的规则为:
";"表示注释,且不能与语句共享一行;LIBRARY声明相应的DLL输出;EXPORTS列出导出函数名及序号idx,idx可以在函数调用时起作用。
dll调用:<LoadLibrary-GetProcAddress-FreeLibrary>
#include <windows.h>
typedef datatype (* funPtr) (parameter_list);
HINSTANCE hDll;
funPtr funName;
hDll = LoadLibrary(dll_path);
if ( NULL != hDll)
{
funName = (funPtr) GetProcAddress(hDll, "fun_name");
// or funName = (funPtr) GetProcAddress(hDll, MAKEINTRESOURCE(idx));
<...>
FreeLibrary(hDll);
}
lib调用:
#pragma comment(lib, "lib_Name")
extern "C" datatype __declspec(dllimport) funName(parameter_list);
DllMain函数:
BOOL APIENTRY DllMain (HANDLE hModule, WORD ul_reason_for_call, LPVOID lpReserved)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
break;
case DLL_THREAD_ATTACH:
break;
case DLL_THREAD_DETACH:
break;
Case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
VB中调用dll:
标准dll:
声明的方法:declare function fun_Name lib "dll_name" [Alias _fun_Name] (arglist) func_ret_type
fun_Name: 函数名,即为dll中函数定义的名字
dll_name: 动态库的名字
Alias _fun_Name: 以函数名_fun_Name重命名调用的函数(可选)
arglist: 参数列表
Func_ret_type: 函数返回类型