转载:https://blog.csdn.net/weixin_44536482/article/details/91519413

vs工程生成dll文件及其调用方法
           
           
               
                   
                                       
                                       
                                       
                                       
                                       
                                                                                                                                            第55号小白鸭
                    2019-06-12 16:33:00
                   
                    3871
                   
                       
                       
                        收藏
                       
                                                10                                               
                   
                                       
               
                                最后发布:2019-06-12 16:33:00首发:2019-06-12 16:33:00
               
               
                                                       
                           分类专栏:
                                                                                            
                                       C语言                                  
                                                                                 
                                                                                                      
                                                                   
                           
                               
                           
                           
                                版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。                           
                           
                                本文链接:https://blog.csdn.net/weixin_44536482/article/details/91519413
                           
                       
                                                                               
               
                                                                展开
                                   
           
       
   
   
                   
                
           
                           
                   
                   
                                            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)
1

(2)、将要释放的接口函数以如下格式进行声明
_declspec(dllexport) 函数首;
1
如直接将当前工程中的main函数作为被另一工程调用的接口函数,则对其声明的格式如下:
_declspec(dllexport) int main(void);
1
       
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文件
}
12345678910111213141516171819
        通过LoadLibrary()函数对dll文件进行加载;再通过GetProcAddress()函数去获取要调用的接口函数的地址(上例中用MyFunCall去存储接口函数的地址);再调用该接口函数(MyFunCall);最后通过FreeLibrary()函数对dll文件进行释放。所以,如果要用于加载其他的dll文件,上例中需改动的地方有:

加载的dll文件名(上例中的"Win32Project1.dll");
要检索的接口函数名(上例中的"main");
调用的接口函数的格式(如上例中的MyFunCall(),函数的参数信息应保持与要调用的接口函数"main"一致)。

————————————————
版权声明:本文为CSDN博主「第55号小白鸭」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_44536482/article/details/91519413

vs工程生成dll文件及其调用方法的更多相关文章

  1. c++ 生成dll文件并调用-转

    .h(头文件) .lib(库文件) .dll(动态链接库文件) 之间的关系和作用的区分   .h头文件是编译时必须的,lib是链接时需要的,dll是运行时需要的. 附加依赖项的是.lib不是.dll, ...

  2. 用Qt生成dll类库及调用方法

    空白工程新建DLL后,将DLL和LIB文件放入需要调用的“指定目录” 项目->属性->连接器->常规->附加库目录->添加“指定目录” 项目->属性->连接器 ...

  3. c++ 生成dll文件并调用

    2 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.

  4. Android NDK 初探,生成so文件以及调用so文件方法

    因为最近业务上涉及安全的问题 然后有一些加密解密的方法和key的存储问题 本来想存储到手机里面,但是网上说一般敏感信息不要存储到手机Sdcard上 而且我这个如果从网络建立通信获取的话,又太耗时,所以 ...

  5. C# 怎么生成DLL文件(转)

    有两种方法:     但是一般这个使用     打开VS2008,依次点击:菜单->文件->新建项目->项目类型visual C#(这里假设为该项目所取的名字是DllBuild)-& ...

  6. Eclipse、MinGW、JNI编写C++生成dll, Java端调用的完整示例(附java.lang.UnsatisfiedLinkError解决方法)

     Eclipse.MinGW.JNI编写C++生成dll, Java端调用的完整示例(附java.lang.UnsatisfiedLinkError解决方法) 问题背景:之前的JNI编程都是基于And ...

  7. Java调用第三方dll文件的使用方法 System.load()或System.loadLibrary()

    Java调用第三方dll文件的使用方法 public class OtherAdapter { static { //System.loadLibrary("Connector") ...

  8. VC6.0 设置动态链接库工程生成dll以及lib文件的位置

    在"Projet"->"Settings..."的"Link"选项卡中 "Output file name"中设置 ...

  9. (Unity)Unity自定义Debug日志文件,利用VS生成Dll文件并使用Dotfuscated进展混淆,避免被反编译

    Unity自定义Debug日志文件,利用VS生成Dll文件并使用Dotfuscated进行混淆,避免被反编译. 1.打开VS,博主所用版本是Visual Studio 2013. 2.新建一个VC项目 ...

随机推荐

  1. Android Studio Eclipse运行时出现 finished with non-zero exit value 2 错误解决方法

    作者:程序员小冰,CSDN博客:http://blog.csdn.net/qq_21376985 QQ986945193 微博:http://weibo.com/mcxiaobing Error:Ex ...

  2. 如何用CMake构建Android C++库

    https://fireflytech.org/2017/11/04/compiling-cc-libraries-for-android/ https://blog.csdn.net/xhp2014 ...

  3. 华为手机logcat中不显示log.e以下级别日志的解决方法

    (1) 进入拨号界面输入:*#*#2846579#*#* (2) 进入“后台设置” ——>“LOG设置” (3) 点击选择“AP日志” (4) 部分手机可能需要重启.

  4. h5跳转微信公众号关注页面

    最近在做h5项目,有个需求是如果用户没有关注公众号,需要引导用户跳转至微信公众号关注页面 制作一个链接,点击该链接跳转到公众号关注页面. 1.从公众平台登进入公众号 2.点击开发>>开发者 ...

  5. OpenShift Container Platform 4.3.0部署实录

    本文参照红帽官方文档,在裸机安装Openshift4.3文档进行.因为只有一台64G内存的PC机,安装vmware vsphere 6.7免费版进行本测试,所以尝试在OCP官方文档要求的最低内存需求基 ...

  6. 十分钟快速入门 Python

    本文以 Eric Matthes 的<Python编程:从入门到实践>为基础,以有一定其他语言经验的程序员视角,对书中内容提炼总结,化繁为简,将这本书的精髓融合成一篇10分钟能读完的文章. ...

  7. 关于Vuex的那些事儿

    vuex vuex是一个专门为Vue.js应用程序开发的状态管理模式,集中式的存储应用的所有组件的状态 以相应的规则保证状态以一种可预测的方式发生变化 单向数据流 State:驱动应用的数据源(单向数 ...

  8. 面经手册 · 第10篇《扫盲java.util.Collections工具包,学习排序、二分、洗牌、旋转算法》

    作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 算法是数据结构的灵魂! 好的算法搭配上合适的数据结构,可以让代码功能大大的提升效率. ...

  9. java 多线程-2

    七.线程生命周期 没错,线程也是有生命周期的.就好像人类有出生.儿童.青年.中年.晚年.死亡一般.下面是线程的生命周期图: 八.线程的安全问题 所谓线程不安全[并发问题],举个例子来说,如卖票,会出现 ...

  10. linux(centos)下密码有效期和密码复杂度设置

    1.密码有效期 方法一: chage -l 用户名 查看用户的过期时间 chage -M 99999 用户名 用命令修改过期时间为永久 chage -M 90 用户名 设置密码有效期为90天 chag ...