Windows环境下动态载入dll就显得简单许多了。
示例:
【部分dll生成部分的代码摘自互联网 参考:http://xiaoou2002.blog.163.com/blog/static/21586669200922652738585/】
一。生成dll
创建项目->Win32->Win32项目,名称:MyDLL->选择DLL
1、新建头文件myDll.h
myDll.h代码如下:
#ifndef MyDll_H_
#define MyDll_H_
#ifdef MYLIBDLL
#define MYLIBDLL extern "C" _declspec(dllimport)
#else
#define MYLIBDLL extern "C" _declspec(dllexport)
#endif
MYLIBDLL int myAdd(int a, int b
#endif
2、修改myDll.cpp
#include "stdafx.h"
#include "testdll.h"
#include <iostream>
using namespace std;
int myAdd(int a, int b)
{
return a+b;
}
3、新建模块定义文件myDll.def
LIBRARY "MyDLL"
EXPORTS
myAdd @1
4、vs2008自动创建dllmain.cpp文件,定义了DLL 应用程序的入口点。
// dllmain.cpp : 定义 DLL 应用程序的入口点。
#include "stdafx.h"
BOOL APIENTRY DllMain( HMODULE 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;
}
最后,编译生成MyDLL.dll文件和MyDLL.lib文件。
二。调用dll
新建myTest工程,在myTest.cpp中:
#include "stdafx.h"
#include <iostream>
#include <string>
#include <windows.h>
using namespace std;
int main()
{
int temp = 0;
static int (*pfn)(int, int) = 0;
char baseDir[256] = "";
char dllPath[512] = "";
HMODULE hModule = GetModuleHandle(NULL);
int pathLen = GetModuleFileNameA(hModule, baseDir, 255);
if(pathLen > 0)
{
int i = 0;
for(i =pathLen-1; i>=0 && baseDir[i] != '\\'; i--);
baseDir[i] = '\0';
}
sprintf(dllPath, "%s\\myDll.dll", baseDir);
HINSTANCE hDll = LoadLibraryA(dllPath);
if(hDll)
{
pfn =(int(*)(int, int)) GetProcAddress(hDll, "myAdd");
}
if(pfn)
{
temp = pfn(3, 4);
}
printf("temp=[%d]\n",temp);
::system("pause");
}
输出:
temp=[7]
请按任意键继续. . .