vs工程生成dll文件及其调用方法

1、vs工程中dll文件的生成

1.1、将生成exe文件的工程修改为生成dll文件

        在工程开发中,我们往往需要将某个工程做成dll动态链接库的形式释放出去;但在工程初期,为方便调试,一般生成的是exe文件;在确认功能开发完毕后,再将其封装成dll文件进行释放。那么,当我们想要将原先是生成exe文件的vs工程,转换为生成dll文件的话;需执行的步骤如下(以vs2013为例):
(1)、将工程的配置类型配置为dll

项目->属性->配置属性->常规->配置类型->动态库(.dll)

在这里插入图片描述
(2)、将要释放的接口函数以如下格式进行声明

_declspec(dllexport) 函数首;

如直接将当前工程中的main函数作为被另一工程调用的接口函数,则对其声明的格式如下:

_declspec(dllexport) int main(void);

        

1.2、新建工程生成dll文件

        若是直接新建生成dll的vs工程,则步骤如下:
        (1)、在新建项目时选择"Win32"项目后,点击确定
在这里插入图片描述

        (2)、在弹出的向导中点击下一步,选择DLL后,点击完成

在这里插入图片描述

        (3)、此时的工程文件如下,其中dllmain是dll应用程序的入口。如下,其中,source.cpp是自己添加的用于实现功能的文件,在这里对函数进行定义;在source.h中对作为调用接口的函数进行声明,格式与1.1 中的一致,即 _declspec(dllexport) 函数首;

在这里插入图片描述
        

2、关于dll文件的调用

        在前面我们介绍了dll文件的生成,那么对于其调用可以通过如下的代码来进行显示调用,便于在程序执行的过程中随时进行加载。

#include <stdio.h>
#include <windows.h>

void main(void)
{
    typedef int(*MyFunDll)(void);

    HMODULE hdll = LoadLibrary("Win32Project1.dll");   //加载dll文件
    if (hdll != NULL)
    {
        MyFunDll MyFunCall = (MyFunDll)GetProcAddress(hdll, "main");//检索要调用函数的地址
        if (MyFunCall != NULL)
        {
            MyFunCall();							    //调用接口函数
        }
    }

    FreeLibrary(hdll);								    //释放dll文件
}

        通过LoadLibrary()函数对dll文件进行加载;再通过GetProcAddress()函数去获取要调用的接口函数的地址(上例中用MyFunCall去存储接口函数的地址);再调用该接口函数(MyFunCall);最后通过FreeLibrary()函数对dll文件进行释放。所以,如果要用于加载其他的dll文件,上例中需改动的地方有:

  • 加载的dll文件名(上例中的"Win32Project1.dll");
  • 要检索的接口函数名(上例中的"main");
  • 调用的接口函数的格式(如上例中的MyFunCall(),函数的参数信息应保持与要调用的接口函数"main"一致)。
已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 书香水墨 设计师:CSDN官方博客 返回首页