C#写的一个界面程序VoiceTracking-仅界面部分

VoiceTracking是公司其他部门的同事做的。本人只负责开发voicetracking 的界面部分。

先上个效果图

根据声源位置指针移动。因为是第一次用C#做东西,所以很多东西比较基础,大家勿喷。

1. C#调用C++写的接口。-- 原则:是越简单的接口越不容易出错

网上的这部分资料很多,这里就不写怎么去实现简单的接口调用了。说下要注意的地方,首先,要明白C#和C++是不同的平台,内存管理机制不一样,一个托管一个非托管,那么,在内存管理这块一定要注意。比如C++中有一个接口是用回调函数实现的,对C#和C++单独而言,回调都是很方便的,但是在一起,就容易出问题。比如我有回调函数

public delegate void WENUM_CALLBACK([MarshalAs(UnmanagedType.ByValTStr, SizeConst = 1024)]byte [] name, IntPtr param);

name 是C++以字符串形式传给C#的,C++的接口代码如下

typedef void (__stdcall *ENUM_CALLBACK)(const wchar_t *name, void *param);

开发过程中(主要使用DEBUG模式),各种正常,在测试的时候,报错,提示Read or write protected memory.  就是由于C++传给C#的常量字符串出的问题。

要下班。先写到这里

继续。整了不少时间才把接口都弄好。C#的代码编写倒是很简单,UI部分的直接在选项里修改就好了。如果有些需要定制的控件,集成那个类别的就可以。

2. 日志是很关键的东西 ---真的是非常关键

尤其是当你的测试机无法debug的时候,你可以通过日志来定位哪里的问题,日志做成宏开关形式的

#define _LOG_ENALBED
#if defined _LOG_ENALBED
    FILE * f = NULL;
    #define LOG_OPEN(r) fopen_s(f, r, "a+")
    #define LOG(r) fprintf(f, r);
    #define LOG_CLOSE() fclose(f)
#else
    #define LOG_OPEN(r)
    #define LOG(r)
#define LOG_CLOSE()
#endif

上面只是表示一下用法。因为上面的日志没有把时间这个关键的变量加进去,感兴趣的同学可以自己写个日志,使用C的<time>库函数获取local time。

3. 单元测试也很重要

这个东西对越是大的项目,重要性越强,写单元测试,会增加开发成本30%-40%。但是总体效率会提高60%。这个数据是老外统计的,如果只是很简单的东西,单元测试不必要那么严格,但总是需要的。

4. 代码风格

CPPLint是一个好的选择,当然需要自己定制一下,比如如果你用VS的IDE,{一定是在一行的开头,如果全按照CPPLint的要求,那是满眼的warning啊。

5. 软件做好了,需要打包发布--个人推荐使用Inno Setup

这个东西很小巧,而且容易使用。有些童鞋会用VS的IDE带的Setup程序,个人感觉功能虽强大,速度稍微有点慢。《---我的这个程序是用VS2012做的,安装了一个近200M的InstallShield,建了Setup工程,到生成release的时候居然有锁,还要序列号,狂晕。然后把代码拷到VS2005下面去弄了个build,安装包是两个文件一个依赖文件夹。最后倒腾来倒腾去,感觉还是Inno Setup简单好用。

上一个Inno Setup的图

恩。看起来有点头疼是吧。其实只要打开程序,点左上角的File->New,按照模板一步步来,基本的功能需求都能实现。

转载于:https://my.oschina.net/yangcol/blog/134881

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值