vs工程生成dll文件及其调用方法
转载: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文件及其调用方法的更多相关文章
- c++ 生成dll文件并调用-转
.h(头文件) .lib(库文件) .dll(动态链接库文件) 之间的关系和作用的区分 .h头文件是编译时必须的,lib是链接时需要的,dll是运行时需要的. 附加依赖项的是.lib不是.dll, ...
- 用Qt生成dll类库及调用方法
空白工程新建DLL后,将DLL和LIB文件放入需要调用的“指定目录” 项目->属性->连接器->常规->附加库目录->添加“指定目录” 项目->属性->连接器 ...
- c++ 生成dll文件并调用
2 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
- Android NDK 初探,生成so文件以及调用so文件方法
因为最近业务上涉及安全的问题 然后有一些加密解密的方法和key的存储问题 本来想存储到手机里面,但是网上说一般敏感信息不要存储到手机Sdcard上 而且我这个如果从网络建立通信获取的话,又太耗时,所以 ...
- C# 怎么生成DLL文件(转)
有两种方法: 但是一般这个使用 打开VS2008,依次点击:菜单->文件->新建项目->项目类型visual C#(这里假设为该项目所取的名字是DllBuild)-& ...
- Eclipse、MinGW、JNI编写C++生成dll, Java端调用的完整示例(附java.lang.UnsatisfiedLinkError解决方法)
Eclipse.MinGW.JNI编写C++生成dll, Java端调用的完整示例(附java.lang.UnsatisfiedLinkError解决方法) 问题背景:之前的JNI编程都是基于And ...
- Java调用第三方dll文件的使用方法 System.load()或System.loadLibrary()
Java调用第三方dll文件的使用方法 public class OtherAdapter { static { //System.loadLibrary("Connector") ...
- VC6.0 设置动态链接库工程生成dll以及lib文件的位置
在"Projet"->"Settings..."的"Link"选项卡中 "Output file name"中设置 ...
- (Unity)Unity自定义Debug日志文件,利用VS生成Dll文件并使用Dotfuscated进展混淆,避免被反编译
Unity自定义Debug日志文件,利用VS生成Dll文件并使用Dotfuscated进行混淆,避免被反编译. 1.打开VS,博主所用版本是Visual Studio 2013. 2.新建一个VC项目 ...
随机推荐
- shader变体
unity shader 变种(多重编译 multi_compile) https://www.jianshu.com/p/f34d896dde5d Unity Shader - Making mul ...
- 初学WebGL引擎-BabylonJS:第1篇-基础构造
继续上篇随笔 步骤如下: 一:http://www.babylonjs.com/中下载源码.获取其中babylon.2.2.js.建立gulp项目
- Linux 操作系统 基础
root: 管理员 /: 根目录[windows : 计算机] ~: 家目录: 管理员:/root/.. 非管理员:/home/... 命令提示符: [root@localhost abc]#: ro ...
- oracle数据库备份 -九五小庞
oracle数据库备份
- Linux驱动之GPIO子系统和pinctrl子系统
前期知识 1.如何编写一个简单的Linux驱动(一)--驱动的基本框架 2.如何编写一个简单的Linux驱动(二)--设备操作集file_operations 3.如何编写一个简单的Lin ...
- 算法数据结构 | 三个步骤完成强连通分量分解的Kosaraju算法
强连通分量分解的Kosaraju算法 今天是算法数据结构专题的第35篇文章,我们来聊聊图论当中的强连通分量分解的Tarjan算法. Kosaraju算法一看这个名字很奇怪就可以猜到它也是一个根据人名起 ...
- ECMAScript6入门学习--第一天
ECMAScript与javascript的关系 ECMA是是一个国际标准化的一个组织,规定了浏览器脚本的语言标准,在上个实际,javascript公司Netscape把javascript托付给EC ...
- 关于java中循环的学习
switch 值是固定的 效率高语法:switch (表达式) { case 常量 1: 语句; break; case 常量 2: 语句; break; … default: 语句; break;} ...
- python中RGB色彩
turtle.colormode(mode)来改变色彩数值的使用 如果在修改颜色时写turtle.colormode(1.0) ,就需要使用RGB小数模式来去改变颜色 如果在修改颜色时写turtle. ...
- redis部署问题
在部署redis哨兵的时候,一开始一直都是失败:杀死master进程后,没有选出新的master 日志如下 9985:X 18 Feb 20:14:42.409 # +sdown master mym ...