精华内容
下载资源
问答
  • 2022-04-10 11:11:46

    引言

    目的

    这部分是讲述测试方案的目的、作用之类的。

    项目介绍

    对项目进行一个简要的概述,包括哪些用户,不同类型的用户主要操作是什么。

    参考文档

    包含项目计划、项目软件设计说明书,需求分析和说明书、接口文档等。

    术语和缩略语

    针对项目软件设计说明书中提及的属于进行解释和说明,确保日后开会测试人员能明白讲的是什么。

    测试范围

    针对项目进行的功能测试,列出项目所包含的主要功能模块。

    测试策略

    冒烟测试

    冒烟测试主要是针对主业务主功能做流程性验证,以执行结果正确为通过标准。

    自动化测试

    包含哪些自动化测试,接口自动化,前端ui自动化,app自动化等,以及使用什么语言,框架进行脚本编写。

    手工测试

    项目中的那些部分需要用到手工测试。

    缺陷管理

    使用什么工具管理缺陷,jira,禅道等。

    测试准备检查

    测试环境、硬件要求,数据库的数据量,自动化测试的脚本,测试工具等是否准备齐全。

    测试用例

    测试用例如何编写,用到哪些用例管理工具。

    测试通过标准

    1,系统实现的功能和流程与需求文档的一致。
    2,不存在bug等级1,2 的bug
    3,bug等级为3,4的bug不得多于n个。
    4,测试用例执行率98%
    5,bug解决率90%
    在实际情况中,如果存在的bug超过了bug等级所规定的数量,测试是不通过的。如果测试执行通过率不达标,需要项目组对测试结果进行评审,决定测试结论是否为通过。

    测试风险

    需求变更,人员流动,开发进度等

    测试输出

    测试报告,测试用例执行结果,缺陷列表。

    附件

    根据实际情况进行添加

    更多相关内容
  • 主要介绍了asp.net文件上传解决方案包括:图片上传、单文件上传、文件上传、检查文件类型等案例,需要的朋友可以参考下
  • 数据清洗的主要类型及步骤

    千次阅读 2021-04-22 11:14:44
    二、数据清洗的主要类型 1、残缺数据 这一类数据主要是一些应该有的信息缺失,如供应商的名称、分公司的名称、客户的区域信息缺失、业务系统中主表与明细表不能匹配等。对于这一类数据过滤出来,按缺失的内容分别...

    一、数据清洗的定义

    数据清洗是指发现并纠正数据文件中可识别的错误的最后一道程序,包括检查数据一致性,处理无效值和缺失值等。数据清洗从名字上也看的出就是把“脏”的“洗掉”,指发现并纠正数据文件中可识别的错误的最后一道程序,包括检查数据一致性,处理无效值和缺失值等。

    二、数据清洗的主要类型

    1、残缺数据

    这一类数据主要是一些应该有的信息缺失,如供应商的名称、分公司的名称、客户的区域信息缺失、业务系统中主表与明细表不能匹配等。对于这一类数据过滤出来,按缺失的内容分别写入不同Excel文件向客户提交,要求在规定的时间内补全。补全后才写入数据仓库。

    2、错误数据

    这一类错误产生的原因是业务系统不够健全,在接收输入后没有进行判断直接写入后台数据库造成的,比如数值数据输成全角数字字符、字符串数据后面有一个回车操作、日期格式不正确、日期越界等。这一类数据也要分类,对于类似于全角字符、数据前后有不可见字符的问题,只能通过写SQL语句的方式找出来,然后要求客户在业务系统修正之后抽取。日期格式不正确的或者是日期越界的这一类错误会导致ETL运行失败,这一类错误需要去业务系统数据库用SQL的方式挑出来,交给业务主管部门要求限期修正,修正之后再抽取。

    3、重复数据

    对于这一类数据——特别是维表中会出现这种情况——将重复数据记录的所有字段导出来,让客户确认并整理。

    数据清洗是一个反复的过程,不可能在几天内完成,只有不断的发现问题,解决问题。对于是否过滤,是否修正一般要求客户确认,对于过滤掉的数据,写入Excel文件或者将过滤数据写入数据表,在ETL开发的初期可以每天向业务单位发送过滤数据的邮件,促使他们尽快地修正错误,同时也可以做为将来验证数据的依据。数据清洗需要注意的是不要将有用的数据过滤掉,对于每个过滤规则认真进行验证,并要用户确认。

    三、数据清洗步骤

    数据清洗的主要路径如图:

    在这里插入图片描述

    1、对缺失值进行清洗

    一般来说,缺失值是最常见的数据问题,处理缺失值也有很多方法,我们需要按照步骤来做,第一就是确定缺失值范围:对每个字段都计算其缺失值比例,然后按照缺失比例和字段重要性,分别制定策略。

    2、去除不需要的字段

    实际操作中是十分简单的,直接删掉就可以了,不过需要提醒大家的是,清洗数据的时候每做一步都备份一下,或者在小规模数据上试验成功再处理全量数据,如果删错数据就会追悔莫及。

    3、填充缺失内容

    这是因为某些缺失值可以进行填充,方法有三种,分别是以业务知识或经验推测填充缺失值、以同一指标的计算结果(均值、中位数、众数等)填充缺失值、以不同指标的计算结果填充缺失值。

    4、重新取数

    由于某些指标非常重要又缺失率高,那就需要和取数人员或业务人员了解,是否有其他渠道可以取到相关数据。这就是缺失值清洗的步骤。

    5、关联性验证

    如果你的数据有多个来源,那么有必要进行关联性验证。如果不关联,这个数据据需要我们清洗。

    以上就是思迈特软件今天分享的数据清洗相关信息。
    感谢您的阅读,更多知识,请继续关注我们,下期再见!
    广州思迈特软件有限公司(简称:思迈特软件Smartbi)是国家认定的“高新技术企业”,专注于商业智能(BI)与大数据分析软件产品和服务。我们在BI领域具有15年以上产品研发经验,提供完整的大数据分析软件产品、解决方案、以及配套的咨询、实施、培训及维护服务。

    思迈特软件统一登录平台

    展开全文
  • vs2017 项目开发 解决方案下的个项目

    千次阅读 多人点赞 2020-04-26 13:20:02
    vs的文件夹路径 ...一个解决方案下可以有个项目,每个项目有一个对应文件夹。解决方案目录下总会有一个同名项目。 Debug文件夹,生成时选择Debug x86则会生成这个文件夹 Release文件夹,生成时选择Rele...

    写在前面:本文仅对vs的项目开发做一个简单的整理,只求可以使用,不深入探讨内部机制。如果想要深入了解,可以查看下文给出的博客连接。
    最后一个章节,“一个规范的工程目录”,记录了创建一个多项目工程的完整操作。

    vs的文件夹路径

    参考博客VS2017的C++开发心得(四)VS的文件夹路径以及项目生成步骤
    一个vs解决方案下,可以有多个项目。总会有一个同名项目。例如,下图中,解决方案SolutionTest下,目前只有一个项目SolutionTest。
    解决方案资源管理器

    一个vs解决方案下有以下若干文件夹/文件夹:

    1. 解决方案文件,名为 [解决方案名称].sln,双击即可打开该解决方案。
    2. 项目文件夹。一个解决方案下可以有多个项目,每个项目有一个对应文件夹。解决方案目录下总会有一个同名项目。包含属于该项目的源码 .h,.cpp等文件。包含项目相关的配置文件*.vcxproj等。包含对应的编译的生成结果,*.obj文件,在其中对应的Debug或者Release目录下。
    3. Debug文件夹,生成时选择Debug x86则会生成这个文件夹。生成对应的exe文件。
    4. Release文件夹,生成时选择Release x86则会生成这个文件夹生成对应的exe文件。
    5. x64文件夹。里面可以有Debug、Release两个子文件夹,同样是生成时选择Debug x64,或者Release x64 则会生成对应的文件夹。生成对应的exe文件。
    6. .vs文件夹,暂时无需关心
      解决方案文件夹

    参考C++编译与链接(1)-编译与链接过程
    vs的项目生成大致分为三步:预处理、编译、链接和生成
    一 、预处理
    C++的预处理是指在C++程序源代码被编译之前,由预处理器对C++程序源代码进行的处理。这个过程并不对程序的源代码进行解析。
    这里的预处理器(preprocessor)是指真正的编译开始之前由编译器调用的一个独立程序。
    预处理器主要负责以下几处

    1. 宏的替换
    2. 删除注释
    3. 处理预处理指令,如#include头文件的展开,#ifdef

    二、编译
    当点击vs菜单的 生成-编译,或者ctrl+f7后,则会对当前单个文件进行编译操作。当生成解决方案时,vs会先对每个cpp进行编译。
    编译时,首先对单个源码文本文件进行语法检查有没有语法错误-error 或者警告-warning。写代码时,编译器给出的标红也就是这种情况。
    vs把每个cpp生成一个对应的.obj文件,默认放在每个项目(注意,是项目而非解决方案)目录下的,对应的debug或者release文件夹下。
    这里借用上文VS2017的C++开发心得(四)VS的文件夹路径以及项目生成步骤中的一张图
    在这里插入图片描述
    三、链接和生成
    可以理解为,以main函数所在的cpp文件为入口,进行搜索,将相关的*.obj文件链接成可执行文件*.exe,存储在解决方案文件夹下的相关文件夹中(如Debug)。多个.obj文件下有同名变量的问题,则会在这一步暴露出来。

    vs的路径宏

    仍然参考VS2017的C++开发心得(四)VS的文件夹路径以及项目生成步骤
    路径宏很大的作用是可以根据你的配置名去选择不同的文件夹下面的资源。而且重要的是,可以选择相对路径而非绝对路径,从而便于整个项目进行迁移。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    常用到的宏,有$(SolutionDir)解决方案目录,和$(Configuration) Debug或Release

    头文件的路径

    主要参考VS2017的C++开发心得(六)头文件的路径问题与属性管理器
    当引用头文件时,有两种写法

    #include <iostream>
    #include "iostream"
    

    两种写法都是合法的,不同之处在于,两种写法优先从不同的路径搜索"iostream"这个文件。
    包含目录
    项目右键-属性管理器-VC++目录-包含目录,这儿就是使用#include<>`时的默认搜索路径。

    对于#include ""这种写法,其默认搜索路径则是在对应的同一个项目文件夹下。

    多项目开发

    主要参考[VS2017的C++开发心得(九)DLL动态链接——多项目开发(https://blog.csdn.net/luoyu510183/article/details/83999548)
    多项目开发的主旨是尽可能的实现代码的模块化,减少对其它项目的依赖性,最好能够独立实现它设计的功能。
    例如,要开发一个Windows窗体程序,实现医学影像数据的采集、处理和显示,那么,可以在解决方案下创建三个项目。一个项目用于,连接医疗影像设备,采集图像数据;一个项目是图像处理操作;还有一个项目用于窗体的UI。这样将几类功能鲜明地分割开,减少项目之间的耦合性,也更容易实现代码复用。

    多项目的创建

    在原来的解决方案里,添加一个新C++项目Project2。
    在这里插入图片描述
    右键解决方案,添加》新建项目》空项目,在Project2的项目属性中把配置类型改成动态库
    在这里插入图片描述
    解决方案下多项目
    如上图所示,现在解决方案SolutionTest下,有两个项目。SolutionTest项目处于高亮状态,这是它作为启动项目的标识。为了了解启动项目,可以查看解决方案属性页:
    解决方案属性页
    单启动项目:
    按f5,或者按ctrl+f10的时候调用的项目。
    多个启动项目:
    适用于多进程间(不是多线程间)的调试,即多个exe之间的通信调试。一般开发很少见,服务器程序比较常用,一个ex用于监听网络请求,一个exe发送请求。此处不做深究。

    要注意的是,调试的时候只会生成启动项目,也就是项目SolutionTest,Project2是默认不生成的。生成-生成解决方案,这种方法固然会生成所有项目,但是vs进行生成的顺序,是按照项目添加的先后顺序的。为了保证SolutionTest调用的Project2项目是最新的,需要手动设置项目的生成顺序。

    同样是在解决方案属性页里,添加项目依赖项即可:
    输出目录 宏

    设定项目SolutionTest依赖于项目Project2,则Project2会先于SolutionTest生成。生成顺序错误的话,可能会导致无法找到xx.lib的错误,因为需要用到的lib并没有在这个项目之前生成出来。
    项目之间的循环依赖 如a依赖b,b依赖c,c依赖a,是不被允许的,vs中也无法进行这种设置。

    解决方案的生成

    在Project2当中,新建了一个类DataProcessor,用于数据处理。
    将Project2设置为配置类型 动态库(.dll),上文已经提到过。

    写完以后,这个DataProcessor类只能在当前项目Project2中被其他cpp文件引用,还少了一步把函数接口导出到dll的导出列表里面。导出到dll的导出列表以后,别的项目才能根据函数名去dll中找到这个函数的位置。这一步的操作就要介绍下如何利用宏定义来完成DLL的函数导出和导入切换:

    首先给Project2加上一个预处理器定义,也就是一个编译前的宏定义PROJECT2(宏定义全部大写)
    在这里插入图片描述
    然后修改DataProcessor类的代码如下

    //DataProcessor.h
    #pragma once
    #ifdef PROJECT2
    #define PROCESS_API _declspec(dllexport)
    #else
    #define PROCESS_API _declspec(dllimport)
    #endif
    
    class PROCESS_API DataProcessor
    {
    public:
    	double ProcessDouble(double d);
    private:
    };
    
    //DataProcessor.cpp
    #include "DataProcessor.h"
    
    double DataProcessor::ProcessDouble(double d)
    {
    	return d * 2;
    }
    

    现在解释下为什么要在Project2里加上一个PROJECT2的项目标识宏定义。首先,dll的导出和导入的关键字区分在于__declspec()的括号里面是dllexport(导出)还是dllimport(导入)。在本项目中我需要告诉VS这个函数是导出的,在其他项目中需要告诉VS这个函数是从别的dll里面导入的。但是不管哪个项目,使用的都是DataProcessor.h这个头文件,这时宏定义作为编译开关的作用就体现出来了。

    在Project2的项目生成中,由于我们定义了PROJECT2的宏定义,所以CRYPT_API是被定义为__declspec(dllexport)。在SolutionTest项目中引用头文件DataProcessor.h时,SolutionTest中并没有定义PROJECT2的宏定义,所以CRYPT_API被定义为__declspec(dllimport)。这样就做到了同一份header不同的声明。

    在此之后,需要在SolutionTest项目中配置Project2的头文件路径和lib路径。
    首先,SolutionTest项目右键——属性——C/C++——常规——附加包含目录,添加头文件所在的路径,这里我用宏 $(SolutionDIr),指定到了解决方案目录
    在这里插入图片描述
    也就是这个位置:
    在这里插入图片描述
    然后要设置lib文件的路径。因为生成时选择64位 x64,所以生成的.lib文件会出现在解决方案目录下的x64\Debug,或者x64\Release下。
    SolutionTest项目右键——属性——链接器——常规——附加库目录,设置lib文件所在的路径,同样用到了宏$(SolutionDir)x64$(Configuration)
    在这里插入图片描述
    此后,还要告诉vs,SolutionTest这个项目用到了哪些库 .lib,SolutionTest项目右键——属性——链接器——输入——附加依赖项,这里添加Project2.lib即可
    在这里插入图片描述
    在main.cpp中测试一下,运行成功

    //main.cpp
    #include "Project2/DataProcessor.h"
    
    int main()
    {
    	double d1, d2;
    	DataProcessor p;
    	d1 = 1;	
    	d2 = p.ProcessDouble(d1);	//d2=2
    	return 0;
    }
    

    最终的解决方案资源管理器界面:
    在这里插入图片描述
    解决方案文件夹:
    在这里插入图片描述
    在这里插入图片描述

    一种规范的工程目录

    注意:在vs的解决方案资源管理器界面,是解决方案的逻辑层级,不代表具体存储在硬盘中的物理位置

    解决方案的创建

    首先 创建一个SolutionTest2解决方案,如下图所示:
    在这里插入图片描述
    创建完成后,解决方案文件夹如下图:
    在这里插入图片描述

    用多个文件夹进行管理

    为了便于代码维护,在服务器上存储,所以在解决方案目录下新建几个文件夹Include,Int,Lib,Output,Source,分别用来存储头文件、.obj文件,.lib文件,exe和dll文件,以及.cpp文件。

    将项目重新添加至解决方案

    在文件资源管理器中,将原来的SolutionTest2文件夹拖到Source目录下。为了在vs中更新这个项目的信息,所以,先在解决方案资源管理器中1.项目SolutionTest右键-移除;2 解决方案SolutionTest右键-添加-现有项目,选择刚才迁移到硬盘中的文件SolutionTest2.vcxproj。如下图:
    在这里插入图片描述
    最终解决方案目录如下图所示:
    在这里插入图片描述
    为此项目添加main.cpp。默认路径已经改成了解决方案文件夹\Source\SolutionTest,直接添加即可,如下图所示:
    在这里插入图片描述

    添加新的项目

    在vs里新建一个项目DataProcessor。解决方案"SolutionTest"右键-添加-新建项目,路径选择解决方案目录下的source文件夹,如下图所示:
    在这里插入图片描述
    如上文提到的,DataProcessor项目右键-属性-配置属性-常规-配置类型-选择动态库(.dll)
    添加一个类NumProcessor。项目DataProcessor右键-添加-新建项-头文件,目录选择include文件夹下的DataProcessor项目文件夹(如果没有,就自己创建),如下图所示:
    在这里插入图片描述
    类似的,添加NumProcess.cpp文件,在Source文件夹下的DataProceeor项目文件夹下

    设置项目依赖关系

    SolutionTest是main函数的入口,将会依赖于其他项目。
    解决方案"SolutionTest"右键-属性-启动项目-选择单启动项目SolutionTest2
    解决方案"SolutionTest"右键-属性-项目依赖项-选择项目SolutionTest2-勾选依赖于DataProcessor

    设置目标文件名

    规范起见,分别对于Debug模式下的每一个项目,设置:项目右键-属性-常规-目标文件名,设置宏 ( P r o j e c t N a m e ) D 对 于 R e l e a s e 模 式 , 默 认 的 已 经 是 (ProjectName)D 对于Release模式,默认的已经是 (ProjectName)DRelease(ProjectName),所以不作修改
    在这里插入图片描述

    include

    Include文件夹。它的下级目录为各个项目的名字。每个项目文件夹存放对应项目的头文件。
    要为每个项目指定这个头文件的目录。举个例子:项目SolutionTest2右键-属性-C/C+±附加包含目录,在此处添加路径 用宏来表示:$(SolutionDir)Include\。对于现有的两个项目,要分别进行这个操作。在Debug和Release模式下,也要分别设置一次(以64位 x64为例)。以下各个目录的设置同理,也需要这样分别设置
    在这里插入图片描述

    int

    Int文件夹,intermedia,中间过程,存储
    .obj格式的目标文件等。文件夹的组织形式位,int文件夹下有debug,release两个文件夹,每一个目录又下辖以各个项目名命名的子文件夹。类似的,对于每个项目,分别对于Debug/Release,设置 项目右键-属性-常规-中间目录,添加宏 $(SolutionDir)Int\$(Configuration)\$(ProjectName)\

    lib

    lib文件夹,存储.lib、.exp文件。
    如下图所示,分为Commonlib通用库,Debug模式下的lib,Release模式下的lib三个子文件夹:
    在这里插入图片描述

    类似的,对于每个项目,分别对于Debug/Release,设置 项目右键-属性-链接器-高级-导入库,设置宏 $(SolutionDir)lib\$(Configuration)\$(TargetName).lib
    在这里插入图片描述

    source

    Source文件夹,各个项目所在的位置。新建项目时也要选择位置在这个文件夹。
    在这里插入图片描述

    output

    Output文件夹,存储最终生成的.exe,.dll,.pdb,.itk文件。
    由于此项目只考虑x64,所以Output文件夹下仅有x64一个文件夹,x64下有Debug,Release两个文件夹
    在这里插入图片描述
    类似的,对于每个项目,分别对于Debug/Release,设置 项目右键-属性-常规-输出目录,设置宏 $(SolutionDir)Output\$(Platform)\$(Configuration)\
    在这里插入图片描述

    预处理器定义

    对于除了启动项目之外的每个项目,对于本项目来说也就是DataProcessor项目。分别对于Debug/Release,设置 项目右键-属性-C/C+±预处理器,添加预处理器定义 为[大写项目名称]_EXPORT,如下图
    在这里插入图片描述
    然后在对应项目的头文件中,添加如下代码,从而使得其对于本项目来说是导出(dllexport),对于其他项目来说是导入(dllimport)

    #ifdef DATAPROCESSOR_EXPORT
    #define DATAPROCESSOR_API _declspec(dllexport)
    #else
    #define DATAPROCESSOR_API _declspec(dllimport)
    #endif
    

    为启动项目设置库

    需要为启动项目设置库(lib)目录。
    对于启动项目,也就是本工程中的SolutionTest2,分别对于Debug,Release,设置 项目右键-属性-链接器-常规-附加库目录,添加宏 $(SolutionDir)lib\$(Configuration)\,和$(SolutionDir)lib\Commonlib\,如下图:
    在这里插入图片描述
    还要告诉vs,SolutionTest2这个项目用到了哪些库 .lib。分别对于Debug,Release模式,设置:SolutionTest2项目右键——属性——链接器——输入——附加依赖项,添加对应的DataProcessorD.lib(Debug模式下)或者DataProcessor.lib(Release模式下),如下图:
    在这里插入图片描述

    完整代码

    #pragma once
    //DataProcessor.h
    #pragma once
    #ifdef DATAPROCESSOR_EXPORT
    #define DATAPROCESSOR_API _declspec(dllexport)
    #else
    #define DATAPROCESSOR_API _declspec(dllimport)
    #endif
    
    namespace DATAPROCESSOR	//每个项目内,类、变量、函数的声明,都用命名空间包含起来,避免重名
    {
    	class DATAPROCESSOR_API NumProcessor
    	{
    	public:
    		double ProcessDouble(double d);
    	private:
    	};
    }
    
    //DataProcessor.cpp
    #include "DataProcessor/NumProcessor.h"
    
    using namespace DATAPROCESSOR;	//注意 使用本项目的命名空间
    
    double NumProcessor::ProcessDouble(double d)
    {
    	return d * 2;
    }
    
    //main.cpp
    #include "DataProcessor/NumProcessor.h"
    using namespace DATAPROCESSOR;
    
    int main()
    {
    	double d1, d2;
    	NumProcessor np;
    	d1 = 1;
    	d2 = np.ProcessDouble(d1);	//d2=2
    	return 0;
    }
    

    经测试运行通过,代码见百度云:
    链接:https://pan.baidu.com/s/1IWPIAB6qjMMRrX0NMsSVNw
    提取码:nzf2

    展开全文
  • VS单解决方案多项目DLLexe管理

    千次阅读 2017-07-05 14:38:58
    假设:一个解决方案包括一个Game项目目录:下有个生成可执行程序的game项目,一个引擎Engine项目,引擎依赖个其他库Pro1,Pro2,Pro3,每个库生成单独的dll,引擎本身也生成dll,Game项目生成exe可执行程序.   准备 ...

    说明

    假设:一个解决方案包括一个Game项目目录:下有多个生成可执行程序的game项目,一个引擎Engine项目,引擎依赖多个其他库Pro1,Pro2,Pro3,每个库生成单独的dll,引擎本身也生成dll,Game项目生成exe可执行程序.

     

    准备

    文件目录组织

    解决方案文件名SolutionTest,其下新建文件夹

    Binaries\Win64:所有的dll,lib,exe将生成到这个文件下

    Engine:所有的dll项目将创建在这个目录下

    Temp:所有的中间文件将保存到这个目录下

    Source:所有dlll项目的源程序将保存到这个目录下

    Game:所有游戏项目将在这个目录下,其源代码也在其下,执行程序生成到Birnaries\Win64.

    Media:所有公共资源文件放到这个目录下.项目自身资源需要自行管理,建议放到Media下相应文件夹下.

     

    发行项目的方法:

    Media必须资源拷贝到Binaries,并将Binaries改名为相应发行项目名,即可.

     

     

    创建解决方案

    打开vs,新建项目,选择:模版->其他项目类型->vs解决方案->空白解决方案,命名为SolutionTest.

    pic1

    在解决方案资源管理器中,右击解决方案,添加三个解决方案文件夹,分别命名为:Engine,Third,Game

     

    创建多个子项目

    Engine解决方案目录新建Engine项目,放置到Engine文件目录下

    选择vc++->空项目

    pic2

     

    Third解决方案目录新建Pro1,Pro2,Pro3项目,放置到Engine文件目录下,项目模版也是空项目

     

    Game解决方案目录新建Sampler项目,放置到Game文件目录下

    选择vc++->空项目,去掉预编译头选项

     

    最终解决方案列表如下:

    pic3

     

    配置各个解决方案

    通用配置

    Engine:

    选中Engine项目右键属性

    配置常规中的:

    输出目录为:$(SolutionDir)Binaries\Win64\

    中间目录为:$(SolutionDir)Temp\$(ProjectName)\

    目标文件名为:$(ProjectName)_d

    目标文件扩展名为:.dll

    配置类型:动态库(.dll)

    pic4

     

    这一步Pro1,Pro2,Pro3Engine完全相同,如法炮制.

     

    Sampler稍有不同的是:

    pic5

     

     

     

    编写测试代码

    Pro1项目加入一个Pro1,AddInt方法

    Pro2项目加入一个Pro2,SubInt方法

    Pro3项目加入一个Pro3,MulInt方法

     

    Engine加入Engine,AddAndSub方法,可以看到这个库引用了Pro1,Pro2

    Sampler有主函数,使用Engine,Muler的方法,引用了Engine,Pro3.

     

     

    Pro1:

    通过类向导,Source\Pro1\目录下添加类:Pro1

    代码如下

    //Pro1.h
    #pragmaonce
    class__declspec(dllexport) Pro1
    {
    public:
    Pro1();
    ~Pro1();
     
    intAddInt(int arg1, int arg2);
     
    };


    问题:为什么class后有__declspec(dllexport) 

    这是为了让VS同时生成项目的dlllib文件

    //Pro1.cpp,其方法AddInt就一行代码:return arg1+arg2;

    Pro2:

    通过类向导,Source\Pro2\目录下添加类:Pro2

    如法炮制

    不同的是自定义方法SubInt实现arg1-arg2

    Pro3:

    通过类向导,Source\Pro3\目录下添加类:Pro3

    如法炮制

    不同的是自定义方法SubInt实现arg1*arg2

     

    Engine项目:

    添加类:Engine存储到Source\Engine文件目录下

    //Engine.h
    #pragmaonce
     
    #include"../Pro1/Pro1.h"
    #include"../Pro2/Pro2.h"
    #include"../Pro3/Pro3.h"
    #pragmacomment(lib,"Pro1_d.lib")
    #pragmacomment(lib,"Pro2_d.lib")
    #pragmacomment(lib,"Pro3_d.lib")
     
     
    class__declspec(dllexport) Engine
    {
    public:
    Engine();
    ~Engine();
     
    //(arg1+arg2)- arg3
    intAddAndSub(int arg1, int arg2,int arg3);
     
    //(arg1+arg2)* arg3
    intAddAndMul(int arg1, int arg2, int arg3);
    };


     

    //Engine.cpp
    #include"Engine.h"
    Engine::Engine()
    {
    }
    Engine::~Engine()
    {
    }
    intEngine::AddAndSub(int arg1, int arg2, int arg3)
    {
    Pro1p1;
    Pro2p2;
    returnp2.SubInt(p1.AddInt(arg1, arg2),arg3);
    }
     
    intEngine::AddAndMul(int arg1, int arg2, int arg3)
    {
    Pro1p1;
    Pro3p3;
    returnp3.MulInt(p1.AddInt(arg1,arg2),arg3);
    }


     

     

    Sampler项目添加文件main.cppSampler项目目录下(不是Source目录)

    代码:

    #include<Engine.h>
    #include<iostream>
    #pragmacomment(lib,"Engine_d.lib")
    intmain()
    {
     
    Engineeng;
    std::cout<< "2+3-4 = " << eng.AddAndSub(2, 3, -4) <<std::endl;
    std::cout<< "(2+3)*4 = " << eng.AddAndMul(2, 3, 4) <<std::endl;
    return0;
    }


     

    额外的配置

    Engine项目

    配置VC++目录:包含目录,加入Pro1,Pro2,Pro3源代码目录

    配置库目录为$(SolutionDir)Binaries\

    pic6

     

    同理配置Sampler项目的包含目录与库目录,包含Engine源代码,库目录相同

     

    测试

    一次编译Pro1,Pro2,Pro3,Engine,Sampler项目

     

    并运行Sampler生成的可执行程序

     

    结果如下:

    pic7

     

     

    现在可以修改各个子项目而不用迁移发动全身了.

     

     

     

    展开全文
  • 经过分析:MultipartFile这样的multipart/form-data媒体类型优先级会高于application/json,而配置@RequestBody 感觉使用一个低优先级的handle一个高优先级的从而报错。 所以在multipart/form-data媒体类型请求时将@...
  • 软件测试之测试方案

    万次阅读 多人点赞 2019-06-07 13:08:30
    测试策略是测试方案的其中一部分。... 测试方案包含: 1、引言(含a、编写目的;b、预期读者;c、参考资料); 2、测试范围; 3、测试策略(根据不同的测试类型考虑不同的测试方法) 测试类型...
  • 需求场景:有时候我们抓到一段... 当然可以,不过当JSON数据包含子对象时,我遇到了子数据对象丢失的问题。如果你们没有遇到,可以使用。 方案二:使用字符串接受JSON格式的字符串数据,然后反序列化成对象,不过这...
  • 批处理主要操作大容量静态数据集,并在计算过程完成后返回结果。  批处理模式中使用的数据集通常符合下列特征... 有界:批处理数据集代表数据的有限集合 持久:数据通常始终存储在某种类型的持久存储位置...
  • 撰写项目的解决方案要点解析

    万次阅读 多人点赞 2018-12-12 10:23:55
    我基本上都是在方案提交前一两天接到写方案的任务,而我自己的事情一般又比别人一点,也不能不做,只好心里大骂一句,骂完后就打电话搞清楚别人的要求,边问就边构思整个方案的推导思路和结构提纲。 因为你不敢让...
  • 如何写好技术方案

    千次阅读 2021-06-09 00:28:37
    本文将介绍写技术方案的意义,如何评判技术方案的好坏,如何写好技术方案。写技术方案的意义 写技术方案根本目的是提高研发效率和质量,具体体现在以下方面:1、提高沟通效率对于整个团队,通过技术方...
  • 在程序开发中,很时候需要用到别人开发的工具包,如OpenCV和itk。一般而言,在vs中,很少使用源文件,大部分是使用对类进行声明的头文件和封装了类的链接库(静态lib或动态dll)。如果要使用这些类,需要在文件中...
  • 界面引用了自定义控件项目,调用的项目连同控件项目一同挪到了别的解决方案里面,双击界面文件,无法直接打开界面,提示“未能找到类型****** 请确保已引用包含类型的程序集.....” 解决办法 在项目的“引用...
  • 自动化测试方案

    万次阅读 2021-09-24 09:52:16
    自动化测试体系方案 方案1全编写代码流程 UI自动化: 使用python或java,配合selenium库及pytest框架做UI自动化测试。(通过selenium的webdriver驱动,驱使浏览器) 1. WebDriver API(基于Java、Python) java...
  • 出现这种问题的主要原因是没有找到响应类的定义!例如class A{public: void printhello(){ std::cout &lt;&lt; "hello" &lt;&lt; std::endl; }}/*****如果B想调用A的话第一种解决在B...
  • 作者简介彭志伟,花名空净,阿里巴巴技术专家。背景数据湖作为一个集中化的数据存储仓库,支持的数据类型具有多样性,包括结构化、半结构化以及非结构化的数据,数据来源上包含数据库数据、bingl...
  • Python六大数据类型

    万次阅读 多人点赞 2020-11-12 13:19:09
    BEGIN: python3数据类型主要分为以下六大类: Numbers(数字) String(字符串) List(列表) Tuple(元组) Dictionary(字典) ...python3的数字类型包括: int(长整型) float(浮点型) complex(复
  • 自动化测试方案设计和实现

    千次阅读 2020-10-31 16:08:05
    自动化测试方案设计和实现
  • 测试计划与测试方案

    2021-12-23 18:02:45
    3.测试计划主要包含测试的目的与范围、角色与职责、资源及安排、风险与应对、测试标准等相关信息,而测试方案主要包含测试方法、测试环境与测试工具等内容。 测试计划偏项目,主要内容是任务,时间,人员,设备...
  • 测试计划及方案怎么写?

    万次阅读 2019-06-14 21:13:31
    ”开心对测试工作了一份憧憬之情。 “可是这些测试文档,我都不知道怎么写,怎么办?”比目鱼先生看着开心苦恼的样子,发了一份打包的测试部门文档模板给她。 开心带着满满的好奇心打开这些模板。噢,原来测试...
  • 数仓中presto解析varchar类型Array数据方案1 源数据:[{“accountSubject”:“10128”,“amount”:500000},{“accountSubject”:“10129”,“amount”:3000000}] 各种原因,包括但不限于,数据从业务数据库中同步到...
  • 各位小伙伴们,有没有遇到这种情况,在信息安全日益受...今天分享一个SpringMVC全局文件上传类型限制终极解决方案,为那些还在迷茫该如何处理全局性文件上传漏洞的小伙伴送来一份小礼物。在阅读我的代码之前,请看下面
  • 目录1 篇幅建议2 整体结构2.1 项目计划书2.2 新苗国创(大创)申报书2.3 偏商务...方案、系统详细设计3.7.1 开发基础3.7.2 系统架构(底层逻辑)3.7.3 技术实现(实现逻辑)3.7.4 交互设计与使用流程3.7.5 数据库设计3
  • 智能停车场解决方案

    万次阅读 2017-08-22 21:15:38
    智能停车场解决方案 版权声明:本文为博主chszs的原创文章,未经博主允许不得转载。 智能停车场是目前世界上增长最快的智慧城市解决方案。城市停车场、机场、大学、购物中心和办公写字楼逐步意识到自动泊车技术的...
  • postgreSql连接报不支持10验证类型

    千次阅读 2020-12-24 10:58:48
    请核对您已经组态 pg_hba.conf 文件包含客户端的IP位址或网路区段,以及驱动程序所支援的验证架构模式已被支援。 使用navicat连接postgresql,报不支持10验证类型 需要我们编辑pg_hba.conf 这个文件是pgsql自带的...
  • 常见漏洞类型

    千次阅读 2020-09-30 10:52:07
    常见SRC漏洞类型 1. WEB漏洞 1.1. 反射型XSS 1.2. 存储型XSS 1.3. 命令注入 1.4. SQL注入 1.5. 上传漏洞 1.6. 信息泄露 1.7. CSRF 1.8. 文件包含 1.9. 逻辑漏洞 1.10. 权限绕过 1.11. URL跳转 1.12. XXE注入 1.13...
  • 按虚拟化对象划分,虚拟化存储实现方式主要有三种。 虚拟化存储的三种实现方式 基于主机的虚拟存储 基于主机的虚拟存储依赖于代理或管理软件,它们安装在一个或个主机上,实现存储虚拟化的控制和管理。由于控制...
  • 测试方案的设计及模板

    千次阅读 2019-11-14 16:37:21
    测试方案设计及模板测试方案设计概括xx测试方案_模板1.引言2.测试策略3.测试设计4.测试资源5.输出文档6.修订记录推荐书籍 测试方案设计概括 xx测试方案_模板 1.引言 1.1目的 根据需要实现的需求与软件的设计架构...
  • 编写技术解决方案思路

    千次阅读 2019-12-31 11:31:22
    原文入口—《原创作者》 前言 技术解决方案概论 如何写好技术解决方案 技术解决方案的设计优化 设计工具的应用 前言: ...2、解决方案的编写者需要承担多重的角色,参与项目售前售中项工作, ...
  • 空指针异常主要原因以及解决方案

    万次阅读 2020-03-23 00:14:44
    空指针异常产生的主要原因如下: (1)当一个对象不存在时又调用其方法会产生异常obj.method() // obj对象不存在 (2)当访问或修改一个对象不存在的字段时会产生异常obj.method() // method方法不存在 (3)字符串...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 889,835
精华内容 355,934
关键字:

多方案的类型主要包括