改用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++生成自动化数据表的更多相关文章

  1. PowerDesigner12逆向生成oracle数据表时,错误解决

    1.用PowerDesigner12建模,在Database—>Generate Database (或者用Ctrl+G快捷键)来生产sql语句,却提示“Generation aborted d ...

  2. EF Code First生成的数据表去复数(去掉数据表最后面那个s) 和 EF decimal 小数位的保留

    modelBuilder.Conventions.Remove<System.Data.Entity.ModelConfiguration.Conventions.PluralizingTabl ...

  3. hibernate中.hbm.xml和注解方式自动生成数据表的简单实例(由新手小白编写,仅适用新手小白)

    绝逼新手小白,so 请大神指点! 如果真的错的太多,错的太离谱,错的误导了其他小伙伴,还望大神请勿喷,大神请担待,大神请高抬贵嘴......谢谢. 好了,正题 刚接触ssh,今天在搞使用.hbm.xm ...

  4. [Nhibernate]SchemaExport工具的使用(一)——通过映射文件修改数据表

    目录 写在前面 文档与系列文章 SchemaExport工具 SchemaUpdate工具 一个例子 总结 写在前面 上篇文章介绍了使用代码生成器的nhibernate模版来生成持久化类,映射文件等内 ...

  5. GreenDao 工具类 --- 使用 Json 快速生成 Bean、表及其结构,"炒鸡"快!

    作者:林冠宏 / 指尖下的幽灵 掘金:https://juejin.im/user/587f0dfe128fe100570ce2d8 博客:http://www.cnblogs.com/linguan ...

  6. pandas数据表

    安装  pip3 install pandas s=pd.Series([1,3,6,90,44,1])   #创建序列[用列表创建].数据源的维度必须是一维 #data  指定数据源 print(s ...

  7. 使用GUID作为数据表主键的好处(转)

    http://blog.itpub.net/3875/viewspace-789520/ 分类: 数据库开发技术 使用GUID作为数据表主键的好处 [@more@] 使用GUID作为数据表主键的好处 ...

  8. django学习-10.django连接mysql数据库和创建数据表

    1.django模型 Django对各种数据库提供了很好的支持,包括:PostgreSQL.MySQL.SQLite.Oracle. Django为这些数据库提供了统一的调用API. 我们可以根据自己 ...

  9. SQL Server中公用表表达式 CTE 递归的生成帮助数据,以及递归的典型应用

    本文出处:http://www.cnblogs.com/wy123/p/5960825.html 我们在做开发的时候,有时候会需要一些帮助数据,必须需要连续的数字,连续间隔的时间点,连续的季度日期等等 ...

随机推荐

  1. iphone中input标签会多出一块的解决办法

    -webkit-appearance: none;

  2. js中的navigator对象

    Navigator 对象包含有关浏览器的信息.所有浏览器都支持该对象 在控制台中输出相关信息的代码 <script> console.log(navigator); </script ...

  3. SQL基本语句汇总

    语句:CREATE TABLE 作用:创建表格 格式:CREATE TABLE tableName (columnName1 columnDataType1, columnName2 columnDa ...

  4. ThinkPHP5 与 ThinkPHP3.* 之间的使用差异

    因为研究TP5时间不是很长,暂时先列以下几处差异: 1.过去的单字母函数已完全被替换掉,如下: S=>cache,C=>config,M/D=>model,U=>url,I=& ...

  5. eclipse maven java1.8支持

    下载Java 8并确保你的Eclipse版本是Kepler SR2. 选择菜单:"Help > Eclipse Marketplace-". 在搜索框中输入"Jav ...

  6. 最后一周psp

    团队项目PSP 一:表格     C类型 C内容 S开始时间 E结束时间 I时间间隔 T净时间(mins) 预计花费时间(mins) 讨论 讨论用户界面 10:20 11:45 25 40 80 分析 ...

  7. hadoop2.2编程:MRUnit测试

    引用地址:http://www.cnblogs.com/lucius/p/3442381.html examples: Overview This document explains how to w ...

  8. Dropbox创造共享新思维——Datastore API

    7月9日,第一届Dropbox开发者大会上,Dropbox发布了Datastore API的beta版本,通过这个API,原始的结构化数据可以在多个设备间的Dropbox内同步.CEO Drew Ho ...

  9. iOS开发系列--UITableView全面解析

    --UIKit之UITableView 概述 在iOS开发中UITableView可以说是使用最广泛的控件,我们平时使用的软件中到处都可以看到它的影子,类似于微信.QQ.新浪微博等软件基本上随处都是U ...

  10. [.net 面向对象程序设计进阶] (17) 多线程(Multithreading)(二) 利用多线程提高程序性能(中)

    [.net 面向对象程序设计进阶] (17) 多线程(Multithreading)(二) 利用多线程提高程序性能(中) 本节要点: 上节介绍了多线程的基本使用方法和基本应用示例,本节深入介绍.NET ...