改用C++生成自动化数据表
改用C++生成自动化数据表
前面的文章中,我们讨论了使用一个基于.NET的第三方程序库来从程序中来生成数据表。在我看来,这整个思路是非常有用的,例如为显示测试结果。我经常会自己在博客中尝试各种像这样的方法。大体上就像你做各种测试然后把结果输出到控制台或者文本文档中……
但是,要是把结果直接写入电子表格然后自动化地生成可视化图表不就更好了吗?这种方法也可以用C++实现吗?
简介
在上面提过的文章中,我给大家演示了如何将测试结果直接输出到Excel文件中。我用了一个很棒的的程序库它叫做 Spire.XLS。不仅是表格,图表也能很轻松地绘制出来!不仅如此,如果你细心发现,它还可以实现数据的计算,预测,运算等。
这些在.NET环境下都可以实现,在这呢我尝试了下用C++ 也就是原代码的主意 – 原语言。
简而言之,我们用C++/CLI作为源代码和托管代码之间的桥梁。

以这种方法,我们可以用疯狂的最优源代码高速运行我们的算法和标准检查程序。结束的时候的,我们仅仅把结果传输到报表产生器模块。然后我们就有了可以进行分析的数据表。
当然另一种方法就是把结果从文本文档(或者控制台)复制到电子数据表中。我以前经常这么干,但不得不说这经常耗费很多时间。
处理来自源代码的调用
从C#调用C++十分简便。你要做的就是用些PInvoke方法以及互操作机制(Interoperability mechanisms)然后从托管代码中调用原函数。
但是呢,我们怎样从C++中调用C#?换句话说:怎样逆用PInvoke?
幸运的是,这应该也不是难事:
1 我们要在C++的公共语言运行时中创建一个数据表模块的动态链接街库(也就是DLL)文件。
2 C++的公共语言运行库允许我们在C#(.NET)中使用第三方程序库
3 在原代码中我们可以使用上面的DLL作为`normal Dll`.
4 我是根据这篇教程实现的:tigerang/reverse-pinvoke
通常像这种交互操作中,当你想从一端传送复杂数据到另一端(托管/原)时,事情就会变的很复杂。在我的示例中,我会只用 framework可以自动处理的简单的,基本的类型。
实现
源代码下载:github.com/fenbf/AutoPerfReport
数据表生成器接口:C++/CLI
String ^range = 行) - 但这对于我大多的实例来说足够用了。
这个程序库数要是让我们在系统中没安装Office的情况下对XLS文件进行操作。另外我在添加相关引用在 Visual Studio 2013 Express甚至在C++ CLI时都没有任何问题。当然他在任何2.0以上版本的.NET Framework上都完美运行。
输出结果
事实上我的原/托管 示例的运行结果和我上篇文章一模一样。和我预想的一样:)
Spire.XLS 库可以创建文档,添加行,生成图表并且可以成功保存到硬盘。当然,这里测试结果好似来自原代码而不是托管代码。

总结
在以上示例中我向大家展示了如何简单地把测试结果从原代码中输出到电子表格文件中。Spire.XLS 库让我们仅仅用几行代码就可以创建文件,并用图表展示运算结果。
在简单的测试示例我们可以随意,但是当你开发一些大的工程的话这种自动化操作会节省很多时间。
改用C++生成自动化数据表的更多相关文章
- PowerDesigner12逆向生成oracle数据表时,错误解决
1.用PowerDesigner12建模,在Database—>Generate Database (或者用Ctrl+G快捷键)来生产sql语句,却提示“Generation aborted d ...
- EF Code First生成的数据表去复数(去掉数据表最后面那个s) 和 EF decimal 小数位的保留
modelBuilder.Conventions.Remove<System.Data.Entity.ModelConfiguration.Conventions.PluralizingTabl ...
- hibernate中.hbm.xml和注解方式自动生成数据表的简单实例(由新手小白编写,仅适用新手小白)
绝逼新手小白,so 请大神指点! 如果真的错的太多,错的太离谱,错的误导了其他小伙伴,还望大神请勿喷,大神请担待,大神请高抬贵嘴......谢谢. 好了,正题 刚接触ssh,今天在搞使用.hbm.xm ...
- [Nhibernate]SchemaExport工具的使用(一)——通过映射文件修改数据表
目录 写在前面 文档与系列文章 SchemaExport工具 SchemaUpdate工具 一个例子 总结 写在前面 上篇文章介绍了使用代码生成器的nhibernate模版来生成持久化类,映射文件等内 ...
- GreenDao 工具类 --- 使用 Json 快速生成 Bean、表及其结构,"炒鸡"快!
作者:林冠宏 / 指尖下的幽灵 掘金:https://juejin.im/user/587f0dfe128fe100570ce2d8 博客:http://www.cnblogs.com/linguan ...
- pandas数据表
安装 pip3 install pandas s=pd.Series([1,3,6,90,44,1]) #创建序列[用列表创建].数据源的维度必须是一维 #data 指定数据源 print(s ...
- 使用GUID作为数据表主键的好处(转)
http://blog.itpub.net/3875/viewspace-789520/ 分类: 数据库开发技术 使用GUID作为数据表主键的好处 [@more@] 使用GUID作为数据表主键的好处 ...
- django学习-10.django连接mysql数据库和创建数据表
1.django模型 Django对各种数据库提供了很好的支持,包括:PostgreSQL.MySQL.SQLite.Oracle. Django为这些数据库提供了统一的调用API. 我们可以根据自己 ...
- SQL Server中公用表表达式 CTE 递归的生成帮助数据,以及递归的典型应用
本文出处:http://www.cnblogs.com/wy123/p/5960825.html 我们在做开发的时候,有时候会需要一些帮助数据,必须需要连续的数字,连续间隔的时间点,连续的季度日期等等 ...
随机推荐
- Codeforces Round #361 (Div. 2) B
B - Mike and Shortcuts Description Recently, Mike was very busy with studying for exams and contests ...
- Swap Nodes in Pairs
Given a linked list, swap every two adjacent nodes and return its head. For example, Given 1->2-& ...
- git使用手册
1.git常用命令 >>首先做git clone 形成本地repository: >>然后做checkout形成分支 列出所有分支 $ git branch –r 切换到新分 ...
- Django models知识小点
django 为使用一种新的方式,即关系对象映射(ORM) 一,创建表 1,基本结构 注意: 1,创建标的时候,如果我们不给表加自增列,生成表的时候会默认给我们生成一列为ID的自增列,当然我们也可以自 ...
- CF2.E
E. Comments time limit per test 2 seconds memory limit per test 256 megabytes input standard input o ...
- linux下安装启动rpc服务
1.上传包 rocky:~ # ls Desktop dts.xml jdk1..0_41 oswbb rpc.rstatd- rpc.rstatd-.tar.gz rocky:~ # cd rpc. ...
- 高通AR和友盟SDK的AndroidManifest.xml合并
高通AR和友盟SDK的AndroidManifest.xml合并 因为高通的AR在android中一开始就要启动,所有主Activity要设置为高通的Activity,即android:name=&q ...
- java基本类型的默认值及其取值范围
- checkbox选中状态不被改变
让它的状态只能看不能改变,加上onclick="return false;". 也可以disabled="true";但是这个颜色变淡了; <input ...
- WPF整理-使用ResourceDictionary管理Logical Resources
“Logical resources may be of various types, such as brushes, geometries, styles, and templates.Placi ...