VS单解决方案多项目多DLL多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

 

 

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

 

 

 

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
1.系统特点 本插件框架实现了界面与逻辑的解偶,从此告别在代码中到处判断工具栏上按钮的使能,同时在不修改系统已有代码的前提下也能实现向系统中增加功能即符合开放-封闭原则,避免在扩展新功能时需要大量修改已有代码,从而又引入了新的BUG,且各模块可以相对比较独立,多人同时开发,从而实现快速开发。 2.运行体验 如果你看到本文档说明你已成功下载了本插件框架的运行包和示例源码,请确保你的电脑安装了.net framework4.0,以及ACE引擎(通过OLEDB访问ACCESS数据,一般安装了OFFICE以后即具有此引擎)。 运行步骤:(1)将压缩包解压 (2)进入OUTPUT目录,直接运行MainForm.exe文件,输入用户名:admin,密码为空,点击登录即可进入软件。 进入软件后,系统会自动打开Customers数据信息,该界面显示Customers数据的列表。工具栏上方还有配置、权限管理两个主要功能页面,其主要功能如下: 配置:本功能页面主要实现的功能是插件的配置,用于配置插件运行的DLL,系统的名称,插件所包含的功能按钮(在DLL中可以包含多个插件,如果在配置文件中没有配置,系统也不会显示出来),包括工具页面,每个工具页面可以包含多个按钮。也可以设置某个功能插件能够自动运行(即打开软件直接打开工功能,如Customers数据即是被定义为自启动的示例),PAD面板(示例中的测试面板)。 权限管理:权限管理实现了基本的权限管理包括用户管理,用户权限,角色管理,角色权限。特点在于不光能根据角色分配权限,也能对用户独分配临时权限。 3.开发环境 要编译运行本示例源码请确保你的计算机上已安装: Visual studio 2010 .net framework4.0 DevExpress11.1.6(编译需要安装此包,运行只需要包含相关的DLL文件,已在本包中包含) 解压压缩包,使用visual studio2010打开文件夹中的td.Addin.sln工程文件,点击运行,即可自动编译,如果提示LC.EXE已退出错误,请再次确认你已安装了DevExpress11.1.6。 4.开发体验 任务:向系统中增加一个功能:在customers的工具栏增加一个显示详情按钮,点击此按钮弹出对话框显示当前选中行的信息。本示例展示如何在不修改原有代码的情况下增加功能。 步骤:1.在解决方案中增加一个类工程:EditNorthWindForm 2.向该工程增加引用:引用位于OUTPUT文件夹中的NorthWind.dll td.Core.dll td.Security.dll 以及所有以DevExpress开头的文件(由于界面使用了DEV控件,所以必须引用) ,添加.NET 的文件System.Drawing System.Windows.Forms。 3.向工程中增加窗口文件:EditNorthWindForm.cs,在工程上点右键,选择添加窗口,如下: 然后将窗口绘制成需要的样式,如增加TEXTBOX等。 将代码修改为: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using DevExpress.XtraEditors; using td.Core; namespace NorthWind { public partial class EditNorthWindForm : DevExpress.XtraEditors.XtraForm { public EditNorthWindForm() { InitializeComponent(); CenterToScreen(); var view= WorkBenchSingleTon.WorkBench.GetTabPage("Customers"); if (view != null) { var control = view.ViewContentControl as NorthWind.NortWindControl; if (control.gridView.gridView1.GetSelectedRow

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值