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项目 ...
随机推荐
- myblogplus 第三期 如何更改你博客的图标,已实现 - mooling原创
三言两语 博客的logo可以凸显你的blog的个性 不知道你有没有觉得博客园原始的那个小矿工不好看了呢 fromto 这才是个人博客的style! 为什么要写这篇文章 因为在博客园的“找找看”中,如果 ...
- Android反解符号表工具
cd ~/android-ndk-r13b/toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64/bin ./arm-linux-an ...
- POJ-2104-K-th Number(区间第K大+主席树模板题)
Description You are working for Macrohard company in data structures department. After failing your ...
- ctf常见源码泄露
前言 在ctf中发现很多源码泄露的题,总结一下,对于网站的搭建要注意删除备份文件,和一些工具的使用如git,svn等等的规范使用,避免备份文件出现在公网 SVN源码泄露 原理 SVN(subversi ...
- 发布jar包到服务器读取resource目录下文件
* 解决:当项目打包成jar之后resources路径下面的证书文件访问不到* 思路:* 1.运行时先复制一个jar* 2.将复制的jar解压到jar文件目录* 3.删除复制的jar跟解压的非证书文件 ...
- Spring Boot与日志
目录 1.日志框架 2.市面上的日志框架 2.1 下表行间无任何对应关系 2.2 日志门面:slf4j 2.3 日志实现:logback 2.4 Spring Boot怎么做的呢? 3.slf4j的使 ...
- Python算法题:有100只大、中、小骆驼,100框土豆,一只大骆驼可以背3框,中骆驼可以背俩框,小骆驼两只背一筐,问大中小各有多少只骆驼?
1 for x in range(0,100): 2 for y in range(0,100): 3 for z in range(0, 100): 4 if x*3+y*2+0.5*z == 10 ...
- [剑指Offer]17-打印从1到最大的n位数(递归)
题目 如题,输入n,则从1打印至99. 题解 考虑到n比较大会有大数问题,所以使用字符数组存储数. 由题可用递归求n位全排列,即为所得. 具体地,用临时字符数组用来存答案,每次递归填好一位,都填好后输 ...
- HarmonyOS面向128KB-128MB内存终端开源
2020年9月10日,以HDC Together为主题的2020年度华为开发者大会在东莞·松山湖举办,华为带来了HarmonyOS 2.0.EMUI 11.HMS.HUAWEI HiLink.HUAW ...
- 基于JavaScript的表格设计:按序添加或删除班级的学生信息
目的: 制作一个表格,显示班级的学生信息 功能: 鼠标移到不同行,背景色发生改变,离开恢复原背景色 添加.删除按钮,可添加,可删除. 程序流程: 首先先建立绑定事件函数. 其次建立鼠标移动改变背景色函 ...