您的位置:首页 > 其它

最简单DLL导出加载示例

2013-01-31 12:09 295 查看
为了方便DLL API导出及加载方法理解,本例提供最简单的C++ DLL示例。

导出方式两种:

用def文件方式导出MyAPI1。
用__declspec (dllexport)方式导出MyAPI2。__declspec参见http://technet.microsoft.com/zh-cn/subscriptions/dabb5z75

加载方式两种,采用隐式+显式链接方式。

开发工具VS2005。

1、创建DLL模块
创建DLL模块PureDLL。

Win32->Win32 Console Application。

Application Settings选项,Application type:DLL,Additional options:Empty project。

新建PureDLL.def、PureDLL.cpp文件。
PureDLL.cpp

#include <iostream>
using namespace std;

void MyAPI1()
{
cout<<"PureDLL::MyAPI1"<<endl;
}

//采用dllexport方式导出API
extern "C" __declspec(dllexport) void MyAPI2();

void MyAPI2()
{
cout<<"PureDLL::MyAPI2"<<endl;
}


PureDLL.def

LIBRARY	"PureDLL"

EXPORTS
MyAPI1 @1


2、创建测试程序
PureDLL_Test测试程序

Win32->Win32 Console Application。

Application Settings选项,Application type:Console application。

PureDLL lib库路径要正确设置,对应项Linker->General-> Additional Library Directories。

PureDLL_Test.cpp

// PureDLL_Test.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <Windows.h>

//隐式链接
#pragma comment(lib,"PureDLL.lib")

//隐式链接函数声明
void MyAPI1();
extern "C" __declspec(dllimport) void MyAPI2();

//隐式调用
void ImplicitCall();
//显式调用
void ExplicitCall();

int _tmain(int argc, _TCHAR* argv[])
{
ImplicitCall();
ExplicitCall();

return 0;
}

void ImplicitCall()
{
MyAPI1();
MyAPI2();
}

void ExplicitCall()
{
HINSTANCE hDllInstance = LoadLibrary(_T("PureDLL.dll"));
if (!hDllInstance)
{
return;
}

typedef void (*LPFunc)(void);
LPFunc pFuncPtr1 = (LPFunc)GetProcAddress(hDllInstance, "MyAPI1");
pFuncPtr1();

LPFunc pFuncPtr2 = (LPFunc)GetProcAddress(hDllInstance, "MyAPI2");
pFuncPtr2();

FreeLibrary(hDllInstance);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: