最简单DLL导出加载示例

为了方便DLL API导出及加载方法理解,本例提供最简单的C++ DLL示例。

导出方式两种:

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

开发工具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);
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值