冠逹小站

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

随笔分类 -  Development

摘要:NND 转来后才发现这个算法错的太离谱了,呵呵,对不住大家了,之后我会改正算法的。不过大家可以先看一下思想64进制,所用的字符是“0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ+/”。一直以来使用16进制从来没有注意过a~f到底是大写还是小写,这次要使用64进制,着实需要看清楚了。参考了apache的codec里关于2进制转换16进制的方法,2进制转换64进制也是同样道理。将byte数组中的一个字节分为两个字节组成char数组,一个byte字节对应0xC0 & data[i] >>>6和0x 阅读全文
posted @ 2012-09-15 01:33 林冠逹 阅读(1381) 评论(0) 推荐(0)

摘要:【1】非对称加密算法: 非对称加密算法又称为公钥加密算法,按照密码学的Kerckhoff原则:“所有算法都是公开的,只有密钥是保密的”。即安全系统的设计者不能指望使用某种秘密的无人知道的算法来保密,而应当使用一种公开的被验证过的算法——只要密钥是安全的,已知算法的攻击者实际上无法破解秘文的算法才是好的算法。RSA算法是目前最流行的公钥密码算法,它使用长度可以变化的密钥。RSA是第一个既能用于数据加密也能用于数字签名的算法。RSA算法的原理如下:1.随机选择两个大质数p和q,p不等于q,计算N=pq;2.选择一个大于1小于N的自然数e,e必须与(p-1)×(q-1)互素。3.用公式计算 阅读全文
posted @ 2011-06-22 18:00 林冠逹 阅读(577) 评论(0) 推荐(0)

摘要:wince下的.net 控件 Datagrid,要实现自定义各列列宽,可以使用DataGridTableStyle,控件运行时表样式. 代码如下://获取数据DataSet ds = Helper.DBHelper.Query(sql);DataTable dt = ds.Tables[0];//样式登场DataGridTableStyle ts = new DataGridTableStyle();ts.MappingName = dt.TableName;//此处非常关键,数据表的名字不对,将无法映射成功//定义列样式DataGridColumnStyle LBarcodeColStyle 阅读全文
posted @ 2011-06-22 17:46 林冠逹 阅读(2527) 评论(0) 推荐(1)

摘要:在我们实际用软件时,经常可看到许多动态连接库。动态连接库有其自身的优点如节省内存、支持多语种等功能,而且,当DLL中的函数改变后,只要不是参数的改变调用起的函数并不需要重新编译。这在编程时十分有用。至于其他妙处,各位在电脑杂志、书籍中都能看到,我这里再说就是废话了. 这次小弟我所要讲的是如何在VC5.0中如何做自己的Win32 DLLs,各位要做自己的动态连接库,首先要知道DLL在VC5.0中都有... 阅读全文
posted @ 2011-05-04 14:28 林冠逹 阅读(294) 评论(0) 推荐(0)

摘要:C# 实现可拖动的工具栏,可停靠浮动工具栏,也就是说,可以将工具栏拖出其原先的停靠位置,而且可以将拖出来的工具栏再拖放回去。 实现的基本思路如下:1、拖动出来以后,需要创建一个大小合适的窗口,作为工具栏新的停靠容器,这个窗口可以这样设置: FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow;ShowIcon = false;ShowInTaskbar = false;TopMost = true; 2、浮动工具栏可以扩展自.Net Framework提供的ToolStrip,它被拖动都某个位置,松开鼠标左 阅读全文
posted @ 2011-04-21 01:55 林冠逹 阅读(4478) 评论(0) 推荐(0)

摘要:今天下午兴冲冲的写完一段IL代码,用Reflector转成C#代码看了下,没有问题,于是引用持久化到硬盘上的动态程序集,想要试一下其中的方法,但是运行后却出现了System.AccessViolationException,提示信息为:“尝试读取或写入受保护的内存。这通常指示其他内存已损坏。”。看着错误提示一阵头大,新配的电脑内存损坏是不太可能了,只好从自己的程序中找原因。 经过一阵调试,终于找... 阅读全文
posted @ 2011-03-28 22:18 林冠逹 阅读(466) 评论(0) 推荐(1)

摘要:之前在Emit的学习过程中,多次碰到了方法的调用,发现有时候是使用Call而有时候是使用Callvirt,一直对这两者的区别不甚了解。然后就查阅了MSDN,MSDN中对这两者的解释为: l Call:调用由传递的方法说明符指示的方法; l Callvirt:对对象调用后期绑定方法,并且将返回值推送到计算堆栈上。 但是看了之后还是很不明白,我想可能是因为中文版的缘故吧。今天下午再次看到了对Callv... 阅读全文
posted @ 2011-03-28 22:14 林冠逹 阅读(931) 评论(1) 推荐(0)

摘要:异常的处理也是程序中比较重要的一个部分,今天我们就针对用IL书写异常处理代码进行讲解,首先照例给出要实现的类的C#代码,如下:class ExceptionHandler{ public static int ConvertToInt32(string str) { int num = 0; try { num = Convert.ToInt32(str); } catch (Exception ... 阅读全文
posted @ 2011-03-28 21:43 林冠逹 阅读(773) 评论(0) 推荐(0)

摘要:之前在研究如何用Emit为动态类添加事件,本来以为会非常简单,但是却碰到了许多的问题,有些问题在之前的答疑篇中已经提到了,并予以了解决,虽然有些地方自己也不是很明白,但毕竟还是解决了,最后比较我写的IL代码,和系统自动生成的,总有一些地方无法做到一致。特别是在为事件添加add和remove方法时,碰到了许多问题,下面我将针对这些问题进行讲解。按照惯例,先给出要实现的类的C#代码,方便反编译后对照着... 阅读全文
posted @ 2011-03-28 21:40 林冠逹 阅读(768) 评论(0) 推荐(0)

摘要:今天我们来研究下用IL书写For循环和Foreach循环,在书中一直看到说使用Foreach循环比普通的For循环来的好,这次正好趁机来看看他们的IL代码有何不同.按照惯例,我们先给出要实现的类的C#代码,如下:class Iterator{ public int ForMethod(int[] ints) { int sum = 0; for (int i = 0; i < ints.Lengt... 阅读全文
posted @ 2011-03-28 21:29 林冠逹 阅读(771) 评论(1) 推荐(0)

摘要:我们通过一个计算A+B的动态类来演示如何为一个动态类添加属性、构造函数、方法,以及在方法中使用类中定义的属性,按照惯例,我们先给出要实现的动态类的C#代码,然后再针对C#代码给出相应的实现,代码如下:public class Add{ private int _a = 0; public int A { get { return _a; } set { _a = value; } } privat... 阅读全文
posted @ 2011-03-28 21:24 林冠逹 阅读(1655) 评论(0) 推荐(0)

摘要:之前的Hello World例子应该已经让我们对Emit有了一个模糊的了解,那么Emit到底是什么样一个东西,他又能实现些什么功能呢?昨天查了点资料,大致总结了下,由于才开始学习肯定有不完善的地方,希望大家能够批评指正。 1. 什么是反射发出(Reflection Emit) Emit应该是属于反射中的一个比较高级的功能,说到反射大家应该都不陌生,反射是在运行时发现对象的相关信息,并且执行这些对象... 阅读全文
posted @ 2011-03-28 20:56 林冠逹 阅读(1530) 评论(1) 推荐(0)

摘要:按照业界的惯例,我们用一个最简单的例子——“Hello World”,来开始我们的Emit之旅。例子的相关代码及注释如下:using System;using System.Collections.Generic;using System.Text;using System.Reflection.Emit;namespace EmitExamples.HelloWorld{ class Progr... 阅读全文
posted @ 2011-03-28 20:37 林冠逹 阅读(548) 评论(0) 推荐(0)

摘要:做一个获取网络文件的大小信息的小软件,由于我的电脑上网使用的是HTTP代理,所以FTp部分是不能测试代码的可行性,所以先把代码贴出来: //输入返回文件信息,包括文件名,格式,大小,以及其他信息 private string GetInfo(string URL){ string Results = ""; string filetype = URL.Substring(URL.LastIndex... 阅读全文
posted @ 2011-03-19 18:53 林冠逹 阅读(3630) 评论(1) 推荐(1)

摘要:摘要: 本文介绍了在C++中实现“属性 (Property)”的方法,“属性”是我们在C#(或其它一些语言)中常常能用到的一种特性。这里介绍的实现方法使用的是标准的C++,没有用任何其它的语言扩展。而大部分的库或是编译器为了实现“属性”,往往对C++作一些扩展,就像我们在托管的C++或是C++ Builder中看到的那样,也有的是使用普通的set和get方法,这些都不能算是真正的“属性”。 正文:... 阅读全文
posted @ 2011-01-25 01:36 林冠逹 阅读(1020) 评论(0) 推荐(0)

摘要:看来很多人还是不太清楚CBuilder2009/2010中的String旧版本的CBuilder中,String类映射为AnsiString,在2009/2010以后的版本中,String类被映射为UnicodeString,但仍然保留AnsiString类型。将String转为字符串指针需要注意:AnsiString只有一个.c_str()方法,返回char *UnicodeString有三个方... 阅读全文
posted @ 2011-01-24 02:48 林冠逹 阅读(893) 评论(0) 推荐(0)

摘要:一、以下是网络上可搜索到的次序 当 Windows Form 应用程序启动时,会以下列顺序引发主要表单的启动事件: System.Windows.Forms.Control.HandleCreated System.Windows.Forms.Control.BindingContextChanged System.Windows.Forms.Form.Load System.Windows.Fo... 阅读全文
posted @ 2010-12-01 00:24 林冠逹 阅读(10038) 评论(0) 推荐(1)

摘要:在BBS的编写中,经常有人问怎样实现树状结构?一个比较不负责任的回答是:使用递归算法。当然,递归是一个可行的办法(二叉树的历遍也好象只能使用递归算法),但对于BBS来说,这样做势必要进行大量的Sql查询(虽然可以使用存储过程来做,但要从根本上加快速度,则应该考虑更快的算法)。 下面给出一个可行的彻底屏弃递的实现树状结构的算法。 下面给出另一种使用“使用中值排序基数法”实现树状结构: 一、主要思想... 阅读全文
posted @ 2010-11-30 11:02 林冠逹 阅读(374) 评论(0) 推荐(0)

摘要:图1: 线程状态关系图你可以通过ThreadState属性获取线程的执行状态。图1将ThreadState列举为“层”。ThreadState被设计的很恐怖,它以按位计算的方式组合三种状态“层”,每种状态层的成员它们间都是互斥的,下面是所有的三种状态“层”:运行 (running) / 阻止 (blocking) / 终止 (... 阅读全文
posted @ 2010-11-21 00:51 林冠逹 阅读(6478) 评论(0) 推荐(1)

摘要:下面的表格列展了.NET对协调或同步线程动作的可用的工具: 简易阻止方法构成目的Sleep阻止给定的时间周期Join等待另一个线程完成锁系统构成目的跨进程?速度lock确保只有一个线程访问某个资源或某段代码。否快Mutex确保只有一个线程访问某个资源或某段代码。可被用于防止一个程序的多个实例同时运行。是中等Semaphore确保不超过指定数目的线程访问某个资源或某段代码。是中等(同步的情况下也提够... 阅读全文
posted @ 2010-11-21 00:50 林冠逹 阅读(912) 评论(0) 推荐(0)