Posted by bianbian on 2009-03-02 09:26
本文Tags: C#, Marshal, struct, 泛型
背景简单提一下:好多个C/C++构成的结构体(struct)数据需要在C#中读取,他们可能在文件中或网络中(总之有办法转为流Stream)。
在C#中用Marshal的PtrToStructure()可以实现byte[]向struct的转变。
不过如果每个struct都要写个方法也太低效了,尤其是我现在遇到几十个struct的情况。。。。
研究了一下泛型(C#2.0就支持了),发现方法泛型可以解决这个问题。
Read the rest of this entry »
标签:
C#,
Marshal,
struct,
泛型遵守创作共用协议,转载请链接形式注明来自
http://bianbian.org 做人要厚道
相关日志
Posted in C#, Technology | 2 Comments »
Posted by bianbian on 2009-03-02 11:27
本文Tags: C#, delegate, Lambda, Micaps, 委派
C# 3.0新增了很多特性,其中委托(delegate)配合Lambda表达式使得程序简洁了很多。
我也就来尝尝鲜(其实也不算鲜了,C# 4.0都出来了。。。),说说我的应用实例:读取Micaps(一种气象上用的软件)数据文件。
Micaps有各类数据文件,比如第一类表示地面填图,格式是:
diamond 1 屏幕上需显示的内容
年 月 日 时次 总站点数
区站号 经度 纬度 ……(后面的你也不关心,就略掉了)
第二类表示高空填图,格式是:
diamond 2 屏幕上需显示的内容
年 月 日 时次 层次 总站点数
…… (参数与地面当然不一样)
如上,第一行是所有文件的通用信息,表示了该文件的类型、标题等,后面就是具体数据,每类文件格式不一。
于是,就要针对不同类型写不同的处理方法,但是,打开文件、关闭文件、检验第一行 这些又是一样的,导致代码重复。
这时候,委托就非常有意义:可以在父类里完成通用处理,而具体的数据处理通过委托交给子类具体负责。
Read the rest of this entry »
标签:
C#,
delegate,
Lambda,
Micaps,
委派遵守创作共用协议,转载请链接形式注明来自
http://bianbian.org 做人要厚道
相关日志
Posted in C#, Technology | No Comments »
Posted by bianbian on 2007-03-07 10:59
本文Tags: .NET, 反编译
其实.NET的dll和Java的class文件是类似的,果然也有对应的“反编译”工具:Reflector
真的很好用,我谢谢它了!
到Reflector官方网站(http://www.aisto.com/roeder/dotnet/)下载最新版本下载后
(要填姓名、单位和email,姓名要中间空一格,比如“bianbian xuxu”)
解压缩会有一个Reflector.exe直接就可以运行,界面如下:

打开一个.NET的库DLL,直接点方法就可以看源码了。。。。
这里是它的一些插件:
http://www.codeplex.com/reflectoraddins
其中我就用了FileDisassembler,功能就是将所有dll反编译的源码导出来。
标签:
.NET,
反编译遵守创作共用协议,转载请链接形式注明来自
http://bianbian.org 做人要厚道
相关日志
Posted in C#, Technology | 2 Comments »
Posted by bianbian on 2007-03-01 11:00
本文Tags: C#, Z-index, Z顺序, 解决
Z顺序(Z-Index)就是控件在绘制时候哪个在上哪个在下的顺序,就像PhotoShop里面的图层顺序。这个是很有用的,最早的虚拟形象(QQShow之类)就是利用Z顺序将N多小图片组合在一起拼合成一张图片,用图层相互覆盖的原理显示复杂的虚拟形象。扯远了,其实简单的说就是如下所示(B的Z-Index比A大,于是遮住了重叠的部分):

可是今天在C#里找了半天也没有发现设置Z顺序的方法。真是郁闷得紧。
于是想看看C#的设计器是怎么实现的,用设计器分别设计了A重叠B和B重叠A(又怀念Delphi一下),查看Design的源代码,OMG,还是没有涉及Z-Index的方法。。。
再看了一下,看来只跟Add到this.Controls里面的顺序有关了。验证了一下,果然如此:先Add的控件会在最上面。。。。。真是汗颜。。。。。
知道了原理,想个解决办法也不难了:就是Add控件进this.Controls之前根据啥属性(我看Tag属性挺好的)排个序。
如果需要运行中间改变某个控件的Z顺序,我看只能在this.Controls里综合运用Remove、Add了。。。
试验了一下,是可以的,代码写得实在太丑了,我就不献丑了。:(
标签:
C#,
Z-index,
Z顺序,
解决遵守创作共用协议,转载请链接形式注明来自
http://bianbian.org 做人要厚道
相关日志
Posted in C#, Technology | 2 Comments »