Mattoid's Blog

~Won't Take No For An Answer

DormForce Blog Home Contact Syndicate this Site (RSS 2.0) Syndicate this Site (Atom) 登陆
  40 Posts :: 0 Stories :: 66 Comments :: 0 Trackbacks

News

档案

随笔分类

相册分类

blog

search


2006年6月21日 #

     最近写java,发现java(当然,现在的一些向.net移植的太监java除外)竟然没有struct这个类型,害的

老夫一直以为头文件用错。NND,气愤之余,责备java语言两下,不过仔细想想,其实是我错了, struct

确实是oo里面比较过时的东东,M$在C#,C++保留此类型,应该是为了向上兼容c,(《Inside The C++

Object Model》一书中貌似也有这样一说),struct完全可以用class代替,据说两者效率上没什么差别;

对于struct在oo中最大的贡献,可能是正因为最初struct才触发了大师们对oo语言的灵感,产生了small talk语言的类概念。。。。

顺便总结下struct和class的一点点区别,

1:最大区别可能是struct是在栈分配,而new一个class的话是在堆分配,只有通过虚构函数或托管C++,C#的垃圾回收机制来完成内存释放;栈的话当然有sp指针,况且一个程序一般来说只有一个栈(当然你硬要找我茬,说在把内核态,用户态等的栈加起来,就不止一个,我也没办法),就不存在内存的泄露问题,不用额外加入垃圾回收机制了。

2:struct是传值,而class是传引用的(可以自己简单的把他们做为参数传到另一个类附值一下,看有没

改变)。

3:class多出了一个this指针(内部机制hanhong老师貌似讲过,今天发现当时没仔细听,后悔++),多

亏了这个this指针,平时写程序方面了很多,可以自己调用自己了。

4:class,struct默认下一个是private,一个public类型

posted @ 0:37 | Feedback (1)

2006年3月4日 #

答案提示在最后
(1)

请问stru1的大小(Size)是多少?

struct stru1
{
    char a;
    short I;
}

    (2)
一个死循环的程序,能看出来吗,
int main(){                                                       
    int i;
    int a[10];
    for (i = 0; i <= 10; ++i)
    {   
        a[i] = 0;
        printf(“%d\n”, i);
    }
   exit(0);   
}
(3)
//还是死循环,呵呵
Void loop();                                            
Void addr();
Int main(){                                                       
  addr();
  loop();
}
Long * p;
Void loop(){
 long i, j;
 j = 0;
 for (i = 0; i<10;i++){
   (*p)--;
   j++;
  printf(“%d\n”, i);
 }
}
void addr(){
  long k;
  k = 0;
  p = &k;
}
(4)
结果是什么?
void main()
{
    int * i;
    allocateInt(i);
    printf(“*i = %d”, *i);
}
void allocateInt(int * i){
  i = (int *) malloc(sizeof(int));
  *i = 3;
}
 
(5)
哪个访问的速度更快
(1)  int array[12][12];
  int I, J;
  for (I = 0; I < 12; I++)
     for(J =0; J< 12; J++)
         array[I][J] = J;
 (2)int array[12][12];
  int I, J;
  for (I = 0; I < 12; I++)
     for(J =0; J< 12; J++)
         array[J][I] = J;

/*提示:
(1)3或4个字节(考虑os中内存存放数据时的“align”的概念,)
(2)考虑数组在堆栈中存放顺序,及初试化时a[0]不是与i相邻的,是初试话在i+10出,然后a[1] = i + 9...

当附值到a[10]正好把原本的i的值覆盖掉...
(3)*p隐含为指向i的指针了
(4)异常
(5)这个简单,就不不多说了
*/

[内有附件]

posted @ 20:57 | Feedback (5)

2006年1月2日 #

方法一:调用api

原理:通过c#调用api为打印机添加自定义的纸张类型(本例自定义类型为下图的mySize),然后程序中调用方法

ForcePageSize就OK了

bool ForcePageSize(System.Drawing.Printing.PrintDocument
   MyPrintDocument)
  {
   for (int i = 0; i <
    MyPrintDocument.PrinterSettings.PaperSizes.Count; ++i)
   {
    if(pd.PrinterSettings.PaperSizes[i].PaperName == "mySize")
    {

     MyPrintDocument.DefaultPageSettings.PaperSize =
     MyPrintDocument.PrinterSettings.PaperSizes[i];

     MyPrintDocument.Print();
     return true;
    }
   }
   return false;

详细源代码见附件

方法二:c#通过调用c++的dll实现纸张自定义,c++实现纸张定义的一段代码,其中pDM->dmPaperLength,
  pDM->dmPaperWidth即为自定义纸张的大小

bool Ctest1App::DoPreparePrintDC()
 {
  CPrintDialog dlgPrint(FALSE);
  if(!dlgPrint.GetDefaults() ) return FALSE;
  LPDEVMODE pDM=dlgPrint.GetDevMode();
  if (pDM==NULL)return FALSE;
  pDM->dmOrientation=DMORIENT_PORTRAIT;

  pDM->dmPaperSize=DMPAPER_USER;
  pDM->dmFields=DM_PAPERSIZE;
  pDM->dmPaperLength=1400;
  pDM->dmPaperWidth=2200;
  pDM->dmFields=-1;
  //::GlobalUn1ock(pDM);
  m_hDC=dlgPrint.CreatePrinterDC();
  if (!m_DC.Attach(m_hDC))return FALSE;
  m_DC.m_bPrinting=TRUE;
  short cxInch=m_DC.GetDeviceCaps(LOGPIXELSX);
  short cyInch=m_DC.GetDeviceCaps(LOGPIXELSY);
  /*if(!m_fontPrint.CreateFont(MulDiv(FONTSIZE,-cyInch,
  72),
  0,0,0,FW_NORMAL,0,0,0,
  GB2312_CHARSET,OUT_CHARACTER_PRECIS,CLIP_CHA RACTER_PRECIS,
  DEFAULT_QUALITY,DEFAULT_PITCH|FF—DONTCARE,HFONTNAME)
  return FALSE;*/
  return TRUE;
 }

 void Ctest1App::DoPrint()
 {
  if(DoPreparePrintDC()==FALSE) return;
  CString str;
  str.LoadString(AFX_IDS_APP_TITLE);
  DOCINFO di;
  //::ZeroMemory(&di,sizeof (DOCINFO));
  di.cbSize=sizeof (DOCINFO);
  di.lpszDocName=str;
  m_DC.StartDoc(&di);
  m_DC.StartPage();
  m_DC.EndPage();
  m_DC.EndDoc();
  //m_DC.Select0bject(p0ldFont);
 }

然后把c++写的函数编译成dll,用regsvr32.exe注册这个dll,再添加这个dll的引用,就可以用C#调用它了,调用的格式:
using System.Runtime.InteropServices;

[DllImport("XXX.DLL",EntryPoint="GetApiFunction",SetLastError=true)]
public static extern int GetApiFunction(
    string strParaA,
    StringBuilder strParaB,
    int intParaC,
    out int intParaD,
    bool blnParaE);

C++数据类型和C#的部分对应关系:

C++           输入输出    C#
==================================
char chr[255]   O    StringBuilder
KCA_DIR         I    int
LPCSTR          I    string
int             I    int
LPSTR           O    StringBuilder
int*            O    out int
DWORD           I    int
DWORD*          O    out int
BOOL            I    bool
Rc_DBMgr        I    IntPtr
long*           O    out long
 
 

 前两种方法都比较烦琐,本来还想研究第三种方法,不过没时间的,感兴趣的可以看下,

m$在c#自定义纸张bug上的最新一点进展http://support.microsoft.com/default.aspx?scid=kb;en-us;282474
 

[内有附件]

posted @ 3:51 | Feedback (1)

c#解析ip包的一个例子,注意代码属性要改成//unsafe,源代码见附件,以下是一不代码.....

 private void ShowAlarm()
  {
   mciSendString( "play  " + Application.StartupPath + "\\resource\\ringout.wav",null,0,0);

   string IPString="10.10.10.10";
   IPHostEntry HosyEntry = Dns.Resolve(Dns.GetHostName());
   if(HosyEntry.AddressList.Length > 0)
   {
    foreach(IPAddress ip in HosyEntry.AddressList)
    {
     IPString=ip.ToString();
    }
   }
     myRawSock=new RawSocket();
     myRawSock.CreateAndBindSocket (IPString,4480);//以22端口为例子
     myRawSock.PacketArrival  += new RawSocket.PacketArrivedEventHandler(DataArrival);
  
     myRawSock.KeepRunning =true;
     myRawSock.Run ();
  }

  private void DataArrival(Object sender, RawSocket.PacketArrivedEventArgs  e)
  {
   label1.Text ="地址" + e.OriginationAddress + "协议" + e.Protocol;
  }

[内有附件]

posted @ 1:29 | Feedback (0)

2005年12月2日 #

【PS:我又挂了1篇文章出来,也很经典,值得一读!】
电子科技大学BBS,转帖:
作者:eqingsheng 提交日期:2004-12-19 17:11:00 

回复CSDN和KAOYAN诸位网友的几点看法,(为避免吵架,郑重声明,本人不是高手,
只是有感而发的一点个人陋见,欢迎指正,事先感谢):
  
  就我自己的理解,谈谈我对读研和软件学院的看法,不妥之处一笑了之即可。
  
  如果你有实际开发工作经验,感觉自己的水平和实力进入了一个高原期,迫切需要从理论上提高,那么计算机学院是唯一选择。因为计算机学院才能让你在理论上更上一层楼。软件学院从教学计划上就没有把你往这方面带。当然能不能更上一层楼最终还是完全取决于你自己。需要特别说明的是,工作经验并不一定等于开发经验,我见过很多工作2-3年的人,但是没有一点开发经验。
  
  你说:“他们都有很强的开发能力,只是不太喜欢读书,也只是希望混个学历对今后在岗位上晋升有好处”,我可以向你保证,你所说的人绝对不是开发能力很强的人。因为,1)高手不可能不喜欢读书;2)高手不可能想去混一个学历;3)高手不可能认为晋升是因为学历的原因。
  
  还需要说明的是,考计算机的人未必个个都是高手,严格来说,大部分都不会编程序。也就是说,庸庸碌碌之辈仍然占绝大多数。研究生毕业的师兄只拿2500元左右的比比皆是,所以不要寄希望于拿一张研究生文凭出去赚高薪。但是,对于有实际开发工作经验的人,要想自己在3年之中有一个真正的提高的话,计算机学院提供了广阔的平台。就我所知,每一个月拿2万以上的也有(上海育碧,图形特效算法设计)。所以,同为研究生毕业,能力的差距是极大的。所以,不要去问“研究生毕业能拿多少?”,要问“像我这种水平的人,研究生毕业能拿多少钱?”这样人家才能够准确地回答你。
  
  所谓“有实际开发工作经验”是指你目前已经具备下列能力:1)你已经认为C++和汇编语言都是很简单的语言,并能够自如地运用;2)你能够在30分钟之内想到正确的五子棋AI算法设计思路和方向;3)你完全理解STL为什么这么重要;4)你能够独立地解决所有的编译与链接问题,哪怕你从来没有遇到的问题,你也不需要询问任何人;5)英文网站是你的首要信息来源;6)能够读懂英语写成的国际标准,比如NTFS磁盘格式标准。7)你经常站在集合论的角度思考算法问题;8)能够理解一个简单的驱动程序,能够理解一个简单3D交互程序;9)你能够认识到线性代数和概率论在实际编程工作中的极端重要性;10)你完全理解COM的设计思想,尤其能够理解COM为什么要设计成这样;11)当我说到虚函数的重要作用时,你不会急着去找书来翻;12)你能够说出C++为什么比其他语言优秀的理由,记
住这种理由应该来自于你的开发体会,而不是因为其他人都这么说。此外还有很多判断标准,但如果你同时具备5条以上,可以认为你已经具备相应的开发经验了。在这种状态下读研,你将取得读研效益的最大值。
  
  读研最重要的是要明白你自己要干什么,不能等导师来告诉你你应该干什么。研究生的优势在于理论功底深厚,思维具有穿透力,当然编程能力首先要过关,不要读完研究生还不知道MFC程序的WinMain函数在哪里。所以,研究生期间,你一定要做有理论深度的算法设计,比如大规模数据的搜索算法,性能是首要考虑因素,不要奢望SQL函数能够帮你解决问题,所有的问题你都必须自己解决,你必须解决内外存交换的性能瓶颈。再比如极品飞车的3D场景生成,图形变换,碰撞检测,物性模拟,纹理映射,灯光模型等等,这些都是可以保证你能拿到2万以上月薪的技术。如果你认为这些东西太难,不可能做得出来的话,那么你就不适合读研。真的,要是你认为读研之后还是要去搞一般的程序设计,如信息管理系统之类的软件,那么你读研的价值就完全不会得到体现,因为这些工作根本就不需要读研。
  
  软件学院宣称培养软件开发人才,恕我直言,我从来没有看见那个高手是培训成功的。成为软件开发高手的路只有一条:自学!软件开发中需要大量的编程实践和独立思考,只有在此过程中,你才能够逐步成长起来。软件学院宣称培养软件项目经理,这更是搞笑,在某种意义上这是欺骗行为。学院里面能够培养出软件开发经理更是十足的谎言,软件项目经理必须,或者说更强调从战争中学会战争。没有实践经验的项目经理就是绣花枕头一个。
  
  实话实说,软件学院就是一个蒙钱的机构,公关工作做得很好,善于打广告,而且都是打着高薪的幌子,就如同外面的什么北大青鸟培训班一样。两个字:蒙钱!四个字:还是蒙钱!
  
  总之一句话,如果你只想成为软件开发高手(比如认为会编驱动程序或杀毒软件就是高手的那种),建议工作,不要考研;完全没有工作经验的,也不建议考研,你进来了只有瞎混一通。如果你有上述工作经验且想成为高级软件工程师(能够独立理解并设计出快速傅立叶变换算法的那种软件工程师)的话,那么强烈建议考研。考研让你有3年放松思考的机会,也有3年让你思想和技术积累沉淀的机会。非常难得的机会。不考研的话,这种机会就是一种奢侈,可望而不可即的那么一种奢侈。
  
  所以,不管你是哪一种情况,都不建议考软件学院。除非你是女生,把能够成为一个研究生当着一生最大满足的那种女生。
    1)关于读书的机会成本问题。读研的机会成本的确是很高。任何人都可以简单地计算出来。所以,我也不赞成所有的人都去读研。读研只适合那些痛感数学在编程中的极端重要性的人。如果对理论工具和理论思维的极端重要性没有切肤的认识,那么读研的价值几乎为0;读研的好处在于:A,把你自己放在一个学术和工程的交叉点上;B,让你具备了进入微软等世界顶级软件研发机构的可能性;记住只是可能性。但是不读研这种可能性为0;C,如前所述,如果没有读研的机会,你也就没有静下心来好好钻研几年理论的机会;一边工作拿高薪,一边深入地学习各种理论,诸位认为这可能吗?我反正认为不可能,我觉得学习钻研理论最需要的就是一个长期安静独处的环境,一边工作一边读书是不可能有这样的环境的,你会觉得每天都在疲于奔命。而读研正好可以提供这样一个环境。我同时还反对整天跟着导师的屁股后面跑,这样会浪费很多时间。读计算机的研究生,主要依靠自己去查阅最新文献,自己去研读文献,和导师的口头交流一个月一次就足够了,前提还需要导师的水平足够牛。如果导师的水平不牛,这也没关系,不理他就是了,自己做好自己的事情即可。
  
  2)关于研究生教学质量问题。坦白地说,全国都是“洪桐县中无好人”,尤其在计算科学领域,大牛极少。那为什么还要去读研?大哉问!把读研的收获寄托在名校或名师的名我认为气上,是注定要失败的。读研全靠自学,研究生之间的差距全部体现在自学能力上面。又有人问,既然是自学,为什么非要读研?回答是:因为读研就是为你买一份保险,就是买一份你自学三年之后不会失业的保险。这份保险主要是一种心理上的后盾,让你在自学过程中经得起诱惑,能够从容镇定地去追寻计算机理论发展的坚实足迹,从欧拉,费马,高斯,康托,图灵等巨匠那里寻找方法论的珠宝。倘若没有这份保证,你在家里面自学3个月,保证你会被失业的压力压得喘不过气来,何谈安心学习?
  
  3)关于实战经验与理论学习的优劣问题。这没有定论,如前所述,管理信息系统,设备驱动开发,工具软件开发,软件病毒剖析等等这些工作不太需要创造性,需要的是耐心和经验,需要的是对既有规范的准确理解,这类开发工作最适合在实战中提高,理论学习没什么作用。但是在人工智能,模式识别,图像压缩,虚拟现实,巨量数据检索,自然语言理解,计算机图形学等等领域,理论学习就占据着绝对的统治地位!这些领域的突破对人类的生活的影响是极其巨大而深刻的。某些领域处于一个极其快速发展的态势之中,比如计算机图形学,相信诸君能够从众多3D游戏的灿烂辉煌中体认到我的这种说法。在这些领域,如果没有扎实的理论功底,一切都是那么遥远,不管你花了多少时间在编程上面。
  
  4)关于高级研发人员的知识结构问题。首先声明,我不是一个纯粹理论激进分子,即认为除了理论之外,一切都不重要。我认为,纯熟的编程技能是最基本但也是最必不可少的技能。没有这个基础,一切计算机理论就是空谈(研究图灵可计算性理论的研究者除外)。有了这个基础之后,下列理论学习方向必须重点突破:
  1,科学哲学。这是核心中的核心!可惜国内不开这门课。不但不开课,而且还作为批判对象来引用,实在是遗憾至极!这是一门教你如何“钓鱼”的学科,在一切科学研究中居于最核心的地位。它是古今科研方法和思维方法的集大成者,很难想象一个成熟的研究者没有一套自己的方法论体系。科学哲学最需要的是领会与总结,它的思想与启示会伴随我们的一生。
  
  2,康托集合论,矩阵方法,离散结构,图论方法,群论方法之间的紧密关系。最重要的认识这些理论对实践的重要启示和方法引导。我始终认为,如果你学了一门理论之后,却不知道这门理论有什么作用,那么你的理论就白学了,你什么东西都没有捞着。所以,学习任何理论之前,先问自己:它有什么用?在哪里用?如何用?带着这些问题去学习理论,你才会真正地学到东西。用这三个问题去问你的理论课老师,他的回答就是判断其实际水平的最佳标准。
  
  3,思维要有极强的穿透力,学会看透文献作者没有写出来的动机。绝大部分大师都有隐瞒自己最具有方法论启示意义的思考环节的习惯。牛顿和华罗庚先生都有这个坏习惯。这让大家认为他们是天才,因为很多问题他想到了,我们想不到。但是为什么他们能想到,我们想不到?他们是怎样想到的?没有人告诉我们牛顿发现万有引力定律时的思考过程,当然,牛顿可以慷慨地把他的思考结果告诉我们,但是,他那可以点石成金的“金手指”却没有教给我们。我们的任务就是要培养透过文章看穿作者背后意图和动机的能力,在这方面,台湾的侯捷和美国的Donbox是绝佳典范。这两只老狐狸(呵呵,是爱称)凭着其猎犬一般的嗅觉,抽丝剥茧,一个把COM背后的幕后设计动机揭开并暴露到了光天化日之下
,另一个把MFC的宏观架构做了一次完美的外科手术。其非凡的思维穿透力令人惊叹。
  
  4,英语。英语本身不重要,但是用英语写成的文献就极其重要了。所以,专门把英语作为一个重头戏列出来。大家不要相信英语无用论的鬼话。对于搞计算机的而言,英语就是你的母语!
  
  5,其它的具体理论还有很多,但是都不如这三个方面重要,因为我觉得这三个方面是最具有根本性,全局性的能力培养环节。需要指出的是,很多高深理论对你的工作是无意义的,当心时间陷进去。一定要把效率最高的时间段用在最具有决定性意义的理论学习上。
  
  5)关于读研之后的出路是否光明的问题。我们应该承认,读研之后,你的工作机会不是变多了,而是变少了。而且越是高手,他的工作机会和工作范围就越少。这是因为,越是搞前沿研发的公司,其数量越少,在这个圈子的人也就越少。你找工作的范围就越小,试问:如果微软的OS设计专家出来找工作,能够让他选择的公司能有几家?但是,这种公司数量的减少是以工资待遇的急剧上升为补偿的,同时,你在工作中所受到的充分尊重也是在一般公司中体会不到的。所以不要担心学了高科技用不上,呵呵,你只会越来越感觉自己学的不够用。相信接到过猎头公司电话的人会体会得到。真正的高手从来就不会担心工作的问题,也从来不会到人才市场上去找工作。既然选择了理论深入,那么就应该把眼光放得更远。
--
※ 来源:·一网深情 bbs.uestc.edu.cn·[FROM: 218.194.50.137]


发信人: london (london), 信区: CCSE
标  题: 有真问题才有真研究
发信站: 一网深情 (Sat Jan  8 17:32:41 2005) , 站内信件

有真问题才有真研究。
一晃, 我在国外待了快四年了, PHD总算要结束了。
在成电读研已经是十年前的事了, 不知道学校变成什么样了。人“老”了, 就爱想家, 所以时不时来网上看看。读了大家关于研究生的讨论,很激动,感觉成电学子的上进和激情一点没变, 和我等当年一模一样,难道这就是传说中的传统。
但是大家对技术的一些看法, 我极大地不同意。大言不谗地讲出来, 希望对学弟们有所帮助。
1。读研究生为何可贵
读研和本科不同:第一在于可以和导师建立“亲密关系”;第二, 可以知道什么是问题。有些话导师是只和自己的学生讲的。一句话, 就能指导学生的一生。 十年前, 周明天老师对我等说了一些没有定论的东西, 当时我只记得一个: TCP的效率很低, 只有应得的千分之一。这个题目就是我现在的PHD论文。 TCP效率, 是目前网络最HOT的, 只要做的出来, 没有卖不出价的。读研的第二的好处就是, 研课中有问题, 而本科的课程中只讲有答案的。 在国外, 研究生课讲的好多是老板自己正在干的。研究生课也就是领你入门。 读研究生, 如果不能独立思考, 找不到一个真的问题来研究, 那只能是本科多两年。
2。什么是好东西。
国内读研最差的是两点: 没有图书馆, 没有好导师。 象周老师这样说的出真东西的掌握不了话语权,结果就是国内对技术发展方向完全看反。比如, IPV6。 IPV6没有前途的。 同学们列出来的“高手”LIST, 我觉得很误导。软件的核心是算法。 如果对一个问题的分析到了算法的层次, 就是大高手了。一个程序里有了算法, 就是KILLER。算法很简单, 就那么几个。 关键是和应用结合。GOOGLE就是一个LINK RANKING算法,看别人做的多大。 只要有真问题, 又有自己的算法(不怕简单), 发财是一定的。至于C++, 能用就好,用多少算多少。 GOOGLE当初想把IDEA几万块卖给YAHOO,YAHOO不要,说你们自己做出来看看。 等做错出来的, GOOGLE也发了。 光有好IDEA不行,这个世界没有伯乐的,还要自己做出来。 所以, 编程很重要,JAVA一定要精, 其它的边学边用就好。计算机有两条路,性能和应用。 搞性能,稳但久,找工作容易。 搞应用, 才真能发财。 中国一遍空白,搞什么都有前途。 比如小百货的进销存。现在的网络商业也是。 大家用GOOGLE差中文的QUICKBOOKS, 有家叫速达的公司发家史特别有启发。软件工程里的学问大, 最关键的是坚持。 ORACLE所以成功, 全在于他在硅谷, 主要的客户也在硅谷,几步路就能上门服务,几年下来, BUG调完了, 也就发了。  大家要是能找一个应用,编上三年, 什么都OK!
3。软件学院好吗?
软件学院是个好东西。 十年前周老师就在讲。要不是体制原因, 那容东软打上门。 当初, 周老师要把计算机系研究生部搬到深圳,都和深圳谈好了, 可惜没成。编软件极费钱。老板必须是高手, 什么都会, 手下也得有人, 不然累死。 写程序的, 只要聪明,会点基础就得。软件学院两年大量培养技术工人, 一个月两千到头。多好啊! 成电的学生, 不要把自己定位于软件工人, 你们要当老板。软件工人得靠老板给他们找事做。 “将帅无能, 累死三军”。 当将帅的, 得什么都会,手下的工人就是自己手的复制品。国内现在没有将帅, 只知道加班。 方法不对, 加班也没用。
软件学院好啊, 那么多人, 可以少花钱办大事。 国外编程之贵, 小公司请不起人。 当初, ALTAVISTA是几个人吃狗饼, 自己编出来的。他们连个大硬盘都买不起。
成电学校不好, 但人好。 成电校友很狠的, 比清华北大强。所以如此, 主要是UNIX的功劳。 成电的老传统是UNIX, 有UNIX才有计算机。 UNIX是一种人生态度, 网络离不开UNIX, 大家多玩UNIX, 成电香火就不绝。成电学生要有大志向, 要有IDEA, 在实现自己IDEA中学习, 光看书没用的。
4。 要做大作业
国内计算机教学最大的问题是作业太小。 不做作业,什么都是假的!编几个大作业, 什么都懂了。 国外的作业很新很大, 我知道好些很大的公司就是几个作业编出来的。几句牢骚, 希望对学弟有帮助。祝恩师周老师健康!问谭浩(老师)好!

posted @ 18:30 | Feedback (8)

自从xp上运行良好的c/s程序被我撵到2003后,冤孽开始了..........

无论怎么整,客户端和服务端之间在本机上就是不能通信,防火墙也关了,系统服务该开的也都开了,安全组策略该配的也配了......但硬是不通信,查看了n遍了,服务端是在监听,可每次用客户端去连的时候,都被服务端狠狠的甩开了.........无乃之下,我又失误的把冤孽锁定在两个可能的幕后黑手上了:2003的安全配置太高深,我参谋不透;m$包装的remoting太变态,适应性差,稍微有点水土不服,就走不出服务端。这样,又是一系列的恶搞,还是失败.........

无乃,再次无乃之下,我怀疑我所学的计算机理论有问题,本机上c/s用127.0.0.1通信也要经过路由不成,是路由的防火墙对我的2003下了毒手了,tracert 127.0.0.1一下, 没经过路由啊——疯了疯了,麻木的乱tracert  以前的199打发时间了,奇怪的发现竟然不通,返回错误代码65,凭着那行错误的返回代码,google,baidu了一通,终于找到原因了,是zone alarm,NND的zone alarm阴魂不散,虽然关了,还是有可能潜伏起来从中作梗。网上也有不少哥门也一样郁闷了很久,退出了那zone alarm,把那些进程都关了,那孤魂还会有可能从中挑拨,只有把他卸载了才天下太平,果然,一切恢复了平静.............

但是那改死的防火墙退出了,并在没有进程服务运行之后,竟然还能阻拦我程序间的亲热,至今还是个不解之谜..............

posted @ 5:36 | Feedback (1)

2005年11月16日 #

  .Net提供三种途径供我们导入一个COM组件:
      - 通过Visual Studio .Net提从的“添加引用”功能
      - 通过命令行方式——TLBIMP.EXE
      - 使用System.Runtime.InteropServices.TypeLibConverter类编程实现导入功能
    第一种方式无须赘述,非常的简单。第三种方式我会说明PIA的用法的同时,对此方法的使用加以说明。不过,我的水平不高,各位不要要求太高喽。^_^ 言归正传,本文关注的是第二种方式。我们可以直接使用此工具提供的最简单的调用方式:TLBIMP TestObj.dll。但需要提醒各位的是,如果我们使用这种方式导入一个COM组件的话,我们将“牺牲”原有的COM组件,这样做是很危险的。个人认为,最简单的调用方式是TLBIMP TestObj.dll /out:interop.TestObjLib.dll。这样,执行后将会产生一个名为interop.TestObjLib.dll的COM Interop。下面将给出简单的例子以说明整个过程。
1、首先用VB写的一个简单的ActiveX Dll
'Project name is TestObjList, class name is TestObj
Option Explicit

Public Function Add(ByVal iValue As Integer) As Integer
    Add = iValue + 1
End Function

2、使用命令行工具导入这个COM组件
TLBIMP TestObjLib.dll /out:interop.TestObjLib.dll

3、在一个.Net Windows Forms中写一段调用此组件的测试代码
using interop.TestObjLib;
private void button1_Click(object sender, System.EventArgs e)
{
    TestObjClass obj = new TestObjClass();
    int num = 1;
    MessageBox.Show(obj.Add(num).ToString());
}

    此处需要说明一点,当TLBIMP.EXE在生成Interop装配件时会在原COM中的类的名字后面加上一个"Class"。调用时,请各位注意。

//************************************************************************************************************

 .如何部署强命名程序集(Strong Name Assembly)和GAC
   a)GAC的概念
   如果一个Assembly要被多个应用程序访问,那么他就必须放在一个CLR已确知的目录下,并且CLR在探测到有对该Assembly的引用时,它必须能自动到该目录下寻找这个程序集。这个已确知的目录称作GAC(Global Assembly Cache),就是全局程序集缓存。它一般位于下面的目录下:<System Drive>:\Windows\Assembly\GAC。
   GAC的作用就是提供给CLR一个已知的确定的目录去寻找引用的 程序集。
  
   b)GAC的内部结构
   GAC是一个特殊的结构化的目录,用Windows Explorer浏览你会以为它只是一个包含很多程序集的普通目录。其实不是这样的,在命令行下查看,你会发现它实际上包含很多子目录,子目录的名字和程序集的名称是相同的,但它们都不是实际的程序集,实际的程序集位于程序集名对应的目录下。比如进入GCFWK子目录,我们会发现其中又有很多的子目录。 机器内每一个安装到GAC的GCFWK.dll在GCFWK中都会有一个子目录。
  
   这里只 有一个目录表明只有一个版本的GCFWK程序集被安装。实际的程序集保存在每一个对应的版本目录下。目录的名称以下划线的形式分割为“(Version)_(Culture)_(PublicKeyToken)”。
  
   GCFWK的语言文化信息为netture,就表示为0.0.0__bf5779af662fc055”。 表示得意义是: “GCFWK, Version=1.0.0.0, Culture=neutral,PublicKeyToken=bf5779af662fc055” 如果语言文化信息为”ja”,就表示”1.0.0.0_ja_bf5779af662fc055”
  
   表示得意义是: “GCFWK, Version=1.0.0.0, Culture=ja, PublicKeyToken=bf5779af662fc055”
  
   c)部署强命名程序集到GAC
  
   GAC包含很多子目录,这些子目录是用一种算法来产生的,我们最好不要手动将程序集拷贝到GAC中,相反,我们应使用工具来完成这样的工作。因为这些工具知道GAC的内部结构J
  
   在开发和测试中,最常用的工具就是GACUtil.exe。 在GAC中注册程序集跟COM注册差不多,但相对更容易:
   1.把程序集添加到GAC中: GACUtil /i sample.dll (参数/i是安装的意思)
   2.把程序集移出GAC GACUtil /u sample.dll (参数/u就移除的意思)
   注意:不能将一个弱命名程序集安装到GAC中。
   如果你试图把弱命名程序集加入到GAC中,会收到错误信息:”
   Failure adding assembly to the cache: Attempt to install an assembly without a strong name”
   d)强命名程序集的私有部署
  
   把程序集安装到GAC有几个好处。首先,GAC使得很多程序可以共享程序集,这从整体上减少了使用的物理内存;其次,我们很容易将一个新版的程序集部署到GAC中,并通过一种发布者策略(差不多就是一种重定向方法,比如将原来引用版本为1.0.0.0程序集的程序,通过更改它的配置文件,转而让程序去引用版本为2.0.0.0的程序集)来使用新版本;最后,GAC还提供了对不同版本程序集的并存(side-by-side)管理方式。但是,GAC的安全策略通常只允许管理员更改,同时,向GAC中安装程序集也破坏了.NET框架的简单拷贝部署的许诺。
  
   除了向GAC或者以私有部署方式部署强命名程序集之外,我们还可以将强命名程序集部署在仅为一小部分程序知道的某个任意目录下。配置每一个应用程序的XML配置文件,让它们指向一个公有目录,这样,在运行时,CLR将知道到哪里去找这个强命名程序集。但这样又有可能会引发”DLL Hell”的问题,因为没有哪个程序可以控制这个程序集何时被卸载。这在.NET中也是不被鼓励的。

posted @ 8:56 | Feedback (0)

~貌似半年没来blog耍了,懒人我今天学勤奋也来补一贴.........

被m$的敲出来的com到.net的变态中间产物--狗屁Interop,搞烦了好几天,今天终于解决了那改死的问题......

问题追溯于xx天天前,用word的com组件时,别人引用using Microsoft.Office.Interop.Word时没什么问题,我偏偏只能using Word才可以完成以后的一步步调用,用全路径就找不到.Interop.Word,我和他们的office版本明明是一样,而且更费解的是Word引用在Properties窗口中查看到的path值指向的是程序运行目录,不是那个原本的WINDOWS\assembly下.......让我每次源代码签入时,改成全路径,保证其他人能调用,那也太不科学吧。而且一直以为是自己用了2003的缘故,可能和.net下的那群太监com不兼容(至少上次尝到sybase稍微低点的版本和2003不支持的苦头,这次干脆利落的一口咬定是操作系统问题),所以一拖再拖,以至于这几天什么都没做成了,失败啊...................

原因是 不知道是我用了d版office的缘故,还是我机器上的office软件发育有点问题,明明装的时候选了支持.net编程那项的,

竟然在全局程序集缓存下(WINDOWS\assembly)下,没Microsoft.Office.Interop.Word的assembly,查了下http://www.microsoft.com/china/msdn/library/office/office/OfficePrIntopAssFAQ.mspx,正常情况下应该是有啊,我每一步都老老实实照做了,nnd的,虽然word的com组件已经成功包装成Interop(测试过,是转成Interop的),但硬是没去WINDOWS\assembly下挂号,

毛了,今天无聊重新下了个Office 2003 的 PIA,装了一下,居然挂号成功,一切的问题都解决了.......................晕哦,那我机器上的office感冒了不成,都卸载重装了xx遍了, 名字空间using Word时也一切正常,真无语了.......

posted @ 8:53 | Feedback (4)

2005年6月21日 #

可重入型函数:可以被一个以上的任务调用,不必担心数据的破坏,它任何时候都可以被中断,一段时间以后又可以运行,二数据不会丢失,所以只使用局部变量,该变量保存在cpu寄存器中或堆栈中,如:

void swap( int * x,int * y){

int Temp;Temp  = *x;*x=*y;*y=Temp;

}

当int Temp在函数外面时就是不可重入型函数

posted @ 17:38 | Feedback (1)

2005年6月18日 #

安全相关E-BOOK国内下载:
http://www.eviloctal.com/

操作系统学习:
http://sysinternals.com/
http://www.osr.com/
http://www.microsoft.com/whdc/default.mspx

程序设计学习:
http://www.vckbase.com/
http://www.codeproject.com/
http://msdn.microsoft.com/

网络安全学习:
国内:
安全焦点 …… http://www.xfocus.net
绿盟科技 …… http://www.nsfocus.net
网络技术 …… http://www.s8s8.net/
小凤居 …… http://www.chinesehack.com/

国外:
SecurityFocus …… http://www.securityfocus.com
Phrack …… http://www.phrack.org
RootKit …… http://www.rootkit.com
Packet Storm …… http://packetstormsecurity.nl/
eEye Digital …… http://www.eeye.com
Windows Security …… http://www.windowsecurity.com
blackhat …… http://www.blackhat.com/

电子产品世界的论坛[2004年09月30日]
http://bbs.edw.com.cn/index.asp

恒颐高科论坛[2004年09月30日]
http://www.hyesco.com/forum/index.asp


国内站点

华恒公司的主页,里面有很多的相关资料,有待大家去发现
http://www.hhcn.com/chinese/embedlinux-res.html

SkyEye嵌入式硬件仿真项目
www.skyeye.org
http://gro.clinux.org/projects/skyeye/

公社的SkyEye项目专栏
http://www.linuxfans.org/nuke/modul...wforum&f=58

Pday水清木华,一个国内看嵌入式新闻的好地方!
http://www.pday.com.cn/

中国单片机公共实验室
http://www.bol-system.com/

中国Linux论坛的嵌入式版,有很多开发板原理图的资料
http://openarm.linuxforum.net/

嵌入开发网
http://www.embed.com.cn/

北京科银京成技术公司
http://www.coretek.com.cn/

微芯力科技
http://www.winsilicon.com

驱动开发网之嵌入式版块,挺综合的一个网站
http://www.driverdevelop.com/index.php

电子爱好者家园[2004年09月30日]
http://home.ee521.com/main.asp

广州友善之臂电子有限公司
http://www.arm9.net/index.asp

国外站点

Linux设备网站,由Rick Lehrbaum创建和维护,是一个嵌入式Linux入门网站,其中包含嵌入式Linux行业的每日新闻、完整系列的快速参考指南、由重要开发者撰写的大量文章,还包括一个交互论坛。
http://www.linuxdevices.com/

下载嵌入式Linux交叉编译工具链的好地方
SnapGear Embedded Linux Distribution Home Page
http://www.snapgear.org/snapgear/index.html
http://www.uclinux.org/pub/uClinux/...lf-tools/gcc-3/

嵌入式Linux联盟(ELC),一个非盈利性的厂商中立的同业工会,其目标是在整个嵌入式、应用和设备市场中发展和推广Linux。
www.embedded-linux.org

Beyond Logic公司主页,提供了许多嵌入式Linux系统开发的资料。
http://www.beyondlogic.org

嵌入式Linux期刊(ELJ,Embedded Linux Journal),主要关注Linux和其他开源软件在嵌入式系统中的应用。 其中有很多业界领导者为ELJ撰写文章。
embedded.linuxjournal.com

有几本写嵌入式Linux系统的书
http://www.embeddedlogic.com/ELSweb/booklinks.html

有关PowerPC体系的嵌入式
www.mvista.com
www.denx.de/e/index1.php

IXP4XX Open Source Developers Guide
http://ixp4xx-osdg.sourceforge.net/

uClinux/ARM项目
http://adam.kaist.ac.kr/~hschoe/notice.html


个人主页

一个业余爱好者代礼周的个人主页,都是实践出来的
http://www.lomx.net/index.htm

D_J嵌入式个人主页,有很多资料!
http://staff.ustc.edu.cn/~wangzhuo/index.html

renbagshoes的个人主页,有些资料可能你会用的到!
http://timity.nease.net


嵌入式Linux操作系统
小型化的嵌入式Linux版本
uClinux — 在没有 MMU 的系统上运行的 Linux。目前支持 Motorola 68K、MCF5206 和 MCF5207 ColdFire 微处理器。
http://www.uclinux.org/index.html

Etlinux — 设计用于在小型工业计算机,尤其是 PC/104 模块上运行的 Linux 的完全分发版
http://www.prosa.it/etlinux/index.html

Tiny Linux ── 可以运行在 386 上的 Linux 分发版。
http://tiny.seul.org/en/

ThinLinux ── 面向专用的照相机服务器、X-10 控制器、MP3 播放器和其它类似的嵌入式应用的最小化的 Linux 分发版。
www.thinlinux.org

LRP(Linux Route Project)
http://www.linuxrouter.org

Peeweelinux一个小的嵌入式Linux发行版
http://freshmeat.net/projects/peeweelinux

具有实时扩展功能的嵌入式Linux版本
RT-Linux主页
http://www.fsmlabs.com
http://www.rtlinux.com

RTAI
http://www.rtai.org

EL/IX

SRT-Linux


嵌入式GUI

Microwindows由Century Software的CEO Greg Haerr主持开发的一个公开源码(LGPL)的项目。Microwindows致力于为一些小型设备和平台提供现代图形窗口环境。Microwindows支持许多硬件平台,移植性很强。Microwindows的主要目的之一便是运行在嵌入式Linux上,并且提供了基于Win32/X的两套API接口。
http://www.microwindows.org
http://microwindows.org

MiniGUI由原清华大学教师魏永明先生开发,是中国人做的得较好的自由软件之一。MiniGUI 是一种面向嵌入式系统或者实时系统的公开源码(LGPL)的图形用户界面支持系统。它主要运行于Linux控制台,实际可以运行在任何一种具有POSIX线程支持的POSIX兼容系统上。
http://www.minigui.org
飞漫软件的MiniGUI项目
http://www.minigui.com/company/cindex.shtml

Qt/Embedded是著名的QT库开发商Trolltech正在进行的面向嵌入式系统的QT版本。Qt/Embedded对于各种硬件接口到GUI工具包提供了完整的图形栈。Qt/Embedded的API同Qt/X11和Qt/Windows的相同,但它并不是基于X11库的。Qt/Embedded是公开源码(LGPL)项目。
http://www.trolltech.com

OpenGUI基于一个用汇编实现的x86图形内核,提供了一个快速的、32位的、高层的C/C++图形接口。OpenGUI也是一个公开源码(LGPL)项目。OpenGUI提供了二维绘图原语,消息驱动的API和BMP文件格式支持。
http://www.tutok.sk/fastgl

PicoGUI是一个可以工作在包括手持式设备等各种硬件上的小型的、可移植的、基于客户/服务器结构的GUI。同X Window系统一样,它具有客户—服务器结构的灵活性,但又不同于X Window系统,它将字体、BMP文件、控件以及一些应用程序所需要的其它的一些资源直接集成在服务器。虽然减少了系统的灵活性,但在速度上有了很大的提高,并且减小了程序大小。
http://picogui.org

Tiny-X是一个为嵌入式系统而开发的紧缩型的X Window服务器。它由SuSE赞助,由XFree86的核心成员Keith Packard开发。Tiny-X的目标是可以在小内存或几乎无内存的情况下良好运行。
http://www.pps.jussieu.fr/~jch/software/kdrive.html

PIXIL提供嵌入式在高级因特网中应用程序的应用。它虽然是为商业化准备的,但它提供GPL协议下的版本,区别是没有技术支持。
http://www.pixil.org

NxZilla - Mozilla on NanoX
http://nxzilla.sourceforge.net

Simple DirectMedia Layer is a cross-platform multimedia library designed to provide low level access to audio, keyboard, mouse, joystick, 3D hardware via OpenGL, and 2D video framebuffer. It is used by MPEG playback software, emulators, and many popular games, including the award winning Linux port of "Civilization: Call To Power."
http://www.libsdl.org/index.php

GtkFB: GTK+ for the Linux Framebuffer
http://www.linuxdevices.com/articles/AT9024868021.html


嵌入式Linux与Java
Java 2 Micro Edition(J2ME官方站点)
http://www.javasoft.com/j2me/

waba为小设备提供一个编程平台。它被定义为一种语言,一个虚拟机,一个类文件格式以及功能类的设置。
http://wabasoft.com/products.shtml

Kaffe is a clean room implementation of the Java virtual machine, plus the associated class libraries needed to provide a Java runtime environment. The Kaffe virtual machine is free software, licensed under the terms of the GNU General Public License.
Kaffe is a great choice as a base for virtual machine education and/or research, or if you need a virtual machine as an integral component of an open source or free software Java distribution.
http://www.kaffe.org

Wonka(一个java虚拟机,超小)
http://www.acunia.com/wonka

posted @ 13:26 | Feedback (0)