有关同一解决方案下多个工程相互调用的问题_同一解决方案中的项目怎么互相调用_chenyang648899的博客-程序员秘密

技术标签: C++  C++-dll  

最新修改时间:20160515
以前自己在写C#的时候就经常需要用到这方面的知识,但当时感觉挺容易处理的,也就并没有留意。现在开始接触C++,刚开始还是有很多不熟悉的。这里我不是想讲lib和dll的区别,就只是说下如何相互调用之间的类并使用吧。

两个工程之间类调用

当我们在同一解决方案下相互之间调用类时,假设现有两个工程A和B,工程A需要调用工程B中的class。
首先右击工程A打开属性对话框,在通用属性里面添加新引用便可以将B文件添加进去。之后在配置属性里面的C/C++的常规目录里的附加包含目录中添加工程B的头文件路径,只有添加了这个头文件路径,才能在工程A中使用#include不会报错。
理论上做到以上两点,便能够调用了。但是如果我们只是这样的话是不能够调用的。因为运行时会提示缺少了lib文件。之所以会这样是因为我们的两个工程生成的文件都是EXE。如果A是启动项目,那么需要将B中配置属性的常规目录下的项目默认值里面的配置类型改为“静态库(.lib)”,因为只有这样,B工程才会在debug文件夹下生成lib文件,运行时才不会出现“不能打开某lib”的错误。

工程调用dll中的类

20160515(成功案例)
测试了很多次,也问了一些人才算是清楚了如何调用,以前自己也尝试了类似的方法,但都没有成功过。
参考教材:MSDN演练
首先说说在同一工程下调用dll,其实跟静态类调用的配置基本是一样的。首先需要在通用属性中将dll工程添加进去。然后在包含目录中添加dll文件的头文件地址。以前应该是这样操作过,但不明白当时为什么没有成功。
我们往往用的dll是别人给的,自己测试的结果是,如果是编写程序还是需要在包含目录中添加dll文件的头文件地址的。同时在链接器的输入选项的附加依赖项中添加相应的lib文件。同时最重要的一点,需要将dll和lib文件放在与自己编写的程序文件夹下面,而不是debug下面。但是当我们运行debug里面的EXE的时候,则需要把dll和lib放在debug下面。
至于_declspec(dllexport)这样的声明,大家可以自己去查相关的说明。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/chenyang648899/article/details/51145922

智能推荐

asp.net core 依赖注入几种常见情况_weixin_30908941的博客-程序员秘密

先读一篇注入入门 全面理解 ASP.NET Core 依赖注入, 学习一下基本使用然后学习一招, 不使用接口规范, 直接写功能类, 一般情况下可以用来做单例.参考https://www.cnblogs.com/tcjiaan/p/8732848.html如何在StartUp中的ConfigureServices方法里直接调用刚刚添加好的注册?// redis注入services.AddSingl...

Linux下GBK->UTF-8文件编码批量转换命令_熊猫家族的博客-程序员秘密

个人博客: http://demi-panda.comPosted 2013-01-12  |  2条评论  |  By 熊猫人Shell  Ubuntu  UTF-8  GBK  编码转换   在工作中,经常会遇到使用操作系统不一样的环境,从而导致在不同环境下的文件编辑的编码是不一样的,Windows默认是GBK编码格式,Linux默认是UTF-8的格

MySQL数据库——truncate和delete的区别_大卫stone的博客-程序员秘密

Truncate和delete的区别:1、delete属于数据操作语言,不仅可以删除表中的数据,还可以删除基于真实表创建的视图中的数据,也可以结合where条件精确地删除某一条数据,还有可能涉及触发器。Truncate属于数据定义语言,只能删除表中的数据,不能作用于视图,而且不支持where子句,如果作用于表会直接删除表中的所有数据,而且不会设计触发器。2、delete删除数据涉及到缓存,当数据非常大时可能缓存不够用,而且速度会很慢。Truncate不涉及缓存,所以涉及到大量数据时,用truncate删

app live photo_‎App Store 上的“Live Photo Converter·”_weixin_39651735的博客-程序员秘密

*** "Exactly what I needed!" ****** "PERFECT!" ****** "Simple and straight to the point!" ***Create stunning live wallpapers from your favorite videos.This app is a professional tool for converting vi...

Spring-boot介绍_坦GA的博客-程序员秘密

原文地址:http://blog.csdn.net/qiutongyeluo/article/details/51883084一、导览本文主要介绍以下几部分: 1. 什么是spring Boot? 2. 为什么使用Spring Boot? 3. Spring Boot提供哪些功能? 4. Spring Boot有哪些模块? 5. 如何使用Spring B

在vue中怎么写行内样式高_vue绑定class与行间样式style详解_weixin_39790686的博客-程序员秘密

一、绑定class属性的方式1、通过数组的方式,为元素绑定多个class.red {color:red;/*color:#ff8800;*/}.bg {background: #000;/*background: green;*/}window.onload = function(){var c = new Vue({el : '#box',data : {red_color : 'red',bg...

随便推点

group by 与order by_qq_38173718的博客-程序员秘密

通过GROUP BY 子句可以将数据划分到不同的组中,实现对记录的分组查询。在查询时,所查询的列必须包含在分组的列中,母的是使查询到的数据没有矛盾。

shiro spring boot的junit测试 获取SecurityUtils_securityutils.getuser()_wdd668的博客-程序员秘密

spring boot :2.2.8.RELEASEshiro:1.4.1junit:junit-jupiter-api-5.5.2.jar在测试类中需要引用 到shiro的登录信息SecurityUtils 不使用mock的情况下import com.hdlh.network.graph.service.GraphService;import com.product.hdlh.HdlhApplicationTests;import org.apache.shiro.Securit

order by group by_dengduoan5084的博客-程序员秘密

order by 后 group by连用, mysql好像 >5.4不起作用通过explain查看执行计划,可以看到没有limit的时候,少了一个DERIVED操作估计是内部优化了,认为ORDERBY在这种语法中可忽略,有LIMIT限制涉及排序后的结果,不会忽略ORDERBY,可以达到预期tp3.2写法$re=M('conf...

为什么需要使用MQ?_消息队列中有注册中心那么还需要额外的吗_cleverutd的博客-程序员秘密

为什么会需要消息队列(MQ)?##########################################################################################主要原因是由于在高并发环境下,由于来不及同步处理,请求往往会发生堵塞,比如说,大量的insert,update之类的请求同时到达mysql,直接导致无数的行锁表锁,甚至最

VS2010 代码下面出现红色波浪线 处理办法_vs sass变量下面波浪线_卡邦的武林的博客-程序员秘密

方法1、VAssistX->Visual Assist X Options->Advanced->Underlines->取消2个勾选项 下面如图:方法2:Tools->Options->Text Editor->C/C++->Advanced->Disable Squiggles->False改为True 下面如图

hive中order by ,sort by ,distribute by,cluster by的区别_chuya1943的博客-程序员秘密

Hive中order by,sort by,distribute by,cluster by的区别 order by 会对数据进行全局排序 只有一个reduce 保证全局有序,数据规模比较大的时候回耗费很多时间 sort by 在数据进入reduce之前完成排序,可以保证局部有序...

推荐文章

热门文章

相关标签