DLL文件的生成与使用

DLL框架

#include <iostream>
#include <Windows.h>

BOOL APIENTRY DllMain( HMODULE hModule,//表示DLL句柄
                       DWORD  ul_reason_for_call,//表示DLL当前的状态,DLL被加载的原因
                       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;
}

 

第一个DLL文件

// dllmain.cpp : 定义 DLL 应用程序的入口点。
#include <iostream>
#include <Windows.h>

using namespace std;

/*
_declspec可以指定的两个存储类属性是dllimport和dllexport。这些向编译器指示从DLL导入或导出(分别)函数或对象。DLL与客户端的接口
*/
_declspec(dllexport) int add(int a, int b) {
    return a + b;
}

int sub(int a, int b) {
    return a - b;
}

BOOL APIENTRY DllMain( HMODULE hModule,//表示DLL句柄
                       DWORD  ul_reason_for_call,//表示DLL当前的状态,DLL被加载的原因
                       LPVOID lpReserved//隐式加载和显示加载
                     )
{
    if (ul_reason_for_call == DLL_PROCESS_ATTACH) {
        cout << "Congratulation!DLL is attached!" << endl;
    }

    return TRUE;
}

 

将DUMPBIN.EXE路径添加进环境变量之后,输入命令查看导出函数信息

dumpbin -exports DLL2.dll

Microsoft (R) COFF/PE Dumper Version 14.22.27905.0
Copyright (C) Microsoft Corporation.  All rights reserved.


Dump of file dll2.dll

File Type: DLL

  Section contains the following exports for Dll2.dll

    00000000 characteristics
    FFFFFFFF time date stamp
        0.00 version
           1 ordinal base
           1 number of functions
           1 number of names

    ordinal hint RVA      name

          1    0 00011177 ?add@@YAHHH@Z

  Summary

        1000 .00cfg
        1000 .data
        1000 .idata
        1000 .msvcjmc
        3000 .rdata
        1000 .reloc
        1000 .rsrc
        8000 .text
       10000 .textbss

 

Dll文件的使用

接着,新建一个cpp项目,我们将生成文件中的Dll2.dll和Dll2.lib文件,移动到我们新建项目中。

 

在cpp中使用显示链接调用

#include <iostream>

#pragma comment(lib, "Dll2.lib")

_declspec(dllexport) int add(int a, int b);
_declspec(dllexport) int sub(int a, int b);

using namespace std;

int main()
{
    cout << add(12, 13) << endl;
    cout << sub(12, 12) << endl;

    system("PAUSE");
    return 0;
}

 

也可以在添加lib文件到资源文件中

 

这样就能够正常调用dll文件了

posted @ 2019-08-29 19:42  Hk_Mayfly  阅读(678)  评论(0编辑  收藏  举报