首页 > 编程知识 正文

vs2017生成dll文件,VS调用dll

时间:2023-05-05 19:56:31 阅读:242791 作者:3519

vs工程生成dll文件及其调用方法 1、vs工程中dll文件的生成1.1、将生成exe文件的工程修改为生成dll文件1.2、新建工程生成dll文件 2、关于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"一致)。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。