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项目 ...
随机推荐
- js中使用const声明变量时需要注意
const实际上保证的,并不是变量的值不得改动,而是变量指向的那个内存地址(初始化的内容)不得改动.对于简单类型的数据(数值.字符串.布尔值),值就保存在变量指向的那个内存地址,因此等同于常量. 简单 ...
- Laravel ServiceProvider注册过程及简单使用
Laravel ServiceProvider注册过程及简单使用 还记得facade注册流程吗?回顾下 在bootstrap/app.php中返回$app实例后,通过singleton方法绑定了三个实 ...
- Resources.UnloadUnusedAssets
2017.11.7更新: 其实这个函数就是顾名思义,关键是理解AssetBundle, Asset, GameObject, 资源等之间的关系,参考此文即可: http://www.cnblogs.c ...
- 递推dp数位
1-n里有多少个1 #include <cstdio> #include <iostream> using namespace std; int main() { int n= ...
- Myabtis动态SQL,你真的会了吗?
目录 前言 什么是动态SQL? 常用的标签 if choose.when.otherwise where foreach set sql include 总结 拓展一下 Mybatis中如何避免魔数? ...
- Johnson全源最短路
例题:P5905 [模板]Johnson 全源最短路 首先考虑求全源最短路的几种方法: Floyd:时间复杂度\(O(n^3)\),可以处理负权边,但不能处理负环,而且速度很慢. Bellman-Fo ...
- C013:颠倒显示三位数
代码: #include "stdafx.h" int _tmain(int argc, _TCHAR* argv[]) { int original; do{ printf(&q ...
- touchstart 事件与 click 事件的冲突
const clickEvent = (function() { if ('ontouchstart' in document.documentElement === true) retu ...
- 理解C#中的ExecutionContext vs SynchronizationContext
原文:https://devblogs.microsoft.com/pfxteam/executioncontext-vs-synchronizationcontext/ 作者:Stephen 翻译: ...
- [Java并发编程之美]第1章 线程基础 补充知识
1.2线程创建与运行 创建线程有三种方式: 继承Thread类并重写run方法: 实现Runnable接口的run方法,new Thread时将该类对象作为参数传入: 实现Callable接口的cal ...