vs2008 C++创建和调用标准DLL

2024-06-11 22:58
文章标签 c++ dll 创建 调用 标准 vs2008

本文主要是介绍vs2008 C++创建和调用标准DLL,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

为了共享代码,需要生成标准的dll,本文将介绍在vs2008 C++生成及调用dll。

一、生成DLL

    生成一个名为FunDll的dll文件,对外函数为addl。

   step1:vs2008 环境下,文件-->新建项目,选择visual c++,在选择 “Win32 项目”,键入项目名称,如 FunDll。如图:

   

点击下一步,勾选“DLL”和“导出空符号”,单击“完成”

  

step 2,编写功能函数

   执行完step1步骤后,在FunDll.h 和FunDll.cpp中会生成一些实例代码,先把这些注释掉,同时修改FunDll.h中的预处理宏定义为:

#ifdef FUNDLL_EXPORTS
#define FUNDLL_API extern "C" __declspec(dllexport)
#else
#define FUNDLL_API extern "C" __declspec(dllexport)
#endif

在FunDll.h中声明add函数,在FunDll.cpp中实现该函数。修改完后代码如下:

FunDll.h:

[cpp]  view plain copy
  1. // 下列 ifdef 块是创建使从 DLL 导出更简单的  
  2. // 宏的标准方法。此 DLL 中的所有文件都是用命令行上定义的 FUNDLL_EXPORTS  
  3. // 符号编译的。在使用此 DLL   
  4. // 任何其他项目上不应定义此符号。这样,源文件中包含此文件的任何其他项目都会将  
  5. // FUNDLL_API 函数视为是从 DLL 导入的,而此 DLL 则将用此宏定义的  
  6. // 符号视为是被导出的。  
  7.   
  8. #ifdef FUNDLL_EXPORTS  
  9. #define FUNDLL_API extern "C" __declspec(dllexport)  
  10. #else  
  11. #define FUNDLL_API extern "C" __declspec(dllexport)  
  12. #endif  
  13. FUNDLL_API int _stdcall add(int plus1,int plus2);  

FunDll.cpp

[cpp]  view plain copy
  1. #include "stdafx.h"  
  2. #include "FunDll.h"  
  3.   
  4. int _stdcall add(int plus1,int plus2)  
  5.  
  6.     int ret  
  7.     ret=plus1+plus2;  
  8.     return ret;  
  9.  

step3:添加 FunDll.def,修改内容为

[cpp]  view plain copy
  1. LIBRARY "FunDll"  
  2. EXPORTS  
  3.     add  


step 4,发布FunDll.dll文件

二,调用FunDll.dll

step1,新建C++控制台程序,项目名称为TestDll。

修改TestDll.cpp的代码为:

[cpp]  view plain copy
  1. // TestDll.cpp 定义控制台应用程序的入口点。  
  2. //  
  3.   
  4. #include "stdafx.h"  
  5. #include   
  6. #include   
  7. #include   
  8.   
  9. //定义MYPROC为指向一个返回值为int型的函数的指针  
  10. typedef int (__stdcall *MYPROC)(int a,int b);  
  11.   
  12. int _tmain(int argc, _TCHAR* argv[])  
  13.     
  14.     HINSTANCE hinstLib;  
  15.     MYPROC ProcAdd;  
  16.     int val1,val2,res;  
  17.     val1=4;  
  18.     val2=5;  
  19.     // Get handle to the DLL module.  
  20.     hinstLib LoadLibrary(L"FunDll.dll");   
  21.   
  22.     // If the handle is valid, try to get the function address.  
  23.     if (hinstLib != NULL)   
  24.       
  25.         ProcAdd (MYPROC) GetProcAddress(hinstLib, "add");   
  26.         res=(ProcAdd)(val1,val2);  
  27.         printf("%d\n",res);  
  28.      
  29.         return 0;  
  30.  


step2,把FunDll拷贝至TestDll项目文件夹下。

step3,运行,测试通过。

这篇关于vs2008 C++创建和调用标准DLL的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1052488

相关文章

C++中unordered_set哈希集合的实现

《C++中unordered_set哈希集合的实现》std::unordered_set是C++标准库中的无序关联容器,基于哈希表实现,具有元素唯一性和无序性特点,本文就来详细的介绍一下unorder... 目录一、概述二、头文件与命名空间三、常用方法与示例1. 构造与析构2. 迭代器与遍历3. 容量相关4

C++中悬垂引用(Dangling Reference) 的实现

《C++中悬垂引用(DanglingReference)的实现》C++中的悬垂引用指引用绑定的对象被销毁后引用仍存在的情况,会导致访问无效内存,下面就来详细的介绍一下产生的原因以及如何避免,感兴趣... 目录悬垂引用的产生原因1. 引用绑定到局部变量,变量超出作用域后销毁2. 引用绑定到动态分配的对象,对象

Java 虚拟线程的创建与使用深度解析

《Java虚拟线程的创建与使用深度解析》虚拟线程是Java19中以预览特性形式引入,Java21起正式发布的轻量级线程,本文给大家介绍Java虚拟线程的创建与使用,感兴趣的朋友一起看看吧... 目录一、虚拟线程简介1.1 什么是虚拟线程?1.2 为什么需要虚拟线程?二、虚拟线程与平台线程对比代码对比示例:三

k8s按需创建PV和使用PVC详解

《k8s按需创建PV和使用PVC详解》Kubernetes中,PV和PVC用于管理持久存储,StorageClass实现动态PV分配,PVC声明存储需求并绑定PV,通过kubectl验证状态,注意回收... 目录1.按需创建 PV(使用 StorageClass)创建 StorageClass2.创建 PV

Linux创建服务使用systemctl管理详解

《Linux创建服务使用systemctl管理详解》文章指导在Linux中创建systemd服务,设置文件权限为所有者读写、其他只读,重新加载配置,启动服务并检查状态,确保服务正常运行,关键步骤包括权... 目录创建服务 /usr/lib/systemd/system/设置服务文件权限:所有者读写js,其他

idea+spring boot创建项目的搭建全过程

《idea+springboot创建项目的搭建全过程》SpringBoot是Spring社区发布的一个开源项目,旨在帮助开发者快速并且更简单的构建项目,:本文主要介绍idea+springb... 目录一.idea四种搭建方式1.Javaidea命名规范2JavaWebTomcat的安装一.明确tomcat

C++读写word文档(.docx)DuckX库的使用详解

《C++读写word文档(.docx)DuckX库的使用详解》DuckX是C++库,用于创建/编辑.docx文件,支持读取文档、添加段落/片段、编辑表格,解决中文乱码需更改编码方案,进阶功能含文本替换... 目录一、基本用法1. 读取文档3. 添加段落4. 添加片段3. 编辑表格二、进阶用法1. 文本替换2

MyBatis/MyBatis-Plus同事务循环调用存储过程获取主键重复问题分析及解决

《MyBatis/MyBatis-Plus同事务循环调用存储过程获取主键重复问题分析及解决》MyBatis默认开启一级缓存,同一事务中循环调用查询方法时会重复使用缓存数据,导致获取的序列主键值均为1,... 目录问题原因解决办法如果是存储过程总结问题myBATis有如下代码获取序列作为主键IdMappe

C++中处理文本数据char与string的终极对比指南

《C++中处理文本数据char与string的终极对比指南》在C++编程中char和string是两种用于处理字符数据的类型,但它们在使用方式和功能上有显著的不同,:本文主要介绍C++中处理文本数... 目录1. 基本定义与本质2. 内存管理3. 操作与功能4. 性能特点5. 使用场景6. 相互转换核心区别

使用Go调用第三方API的方法详解

《使用Go调用第三方API的方法详解》在现代应用开发中,调用第三方API是非常常见的场景,比如获取天气预报、翻译文本、发送短信等,Go作为一门高效并发的编程语言,拥有强大的标准库和丰富的第三方库,可以... 目录引言一、准备工作二、案例1:调用天气查询 API1. 注册并获取 API Key2. 代码实现3