
.NET
文章平均质量分 64
知平软件
上海知平软件的博客
展开
-
强签名的由来和作用
在网上,看到很多初学.NET的网友经常问,强签名是什么,它的作用是什么?一句话,强签名就是唯一标识一个Assembly文件的名称。它由Assembly的文件名、版本号、区域信息、公钥信息和处理器架构信息组成,这样做是为了避免以前Windows里面的DLL HELL问题。 在强名以前,如果一个DLL升级覆盖了老版本的DLL,有可能会导致系统里面一些依赖老版本的DLL程序出现兼容型的问题。这是原创 2009-02-02 21:55:00 · 16171 阅读 · 0 评论 -
用C#编写一个进程外的COM组件示例代码讲解
代码的链接在《用C#编写一个进程外的COM组件》,小技巧:如果你要同时看示例代码和讲解的话,可以用浏览器分别打开示例代码和这篇文章,然后使用Windows提供的纵向平铺窗口功能就可同时看两篇文章了。 TestComVisibleClass.cs里面定义了我们要发布给COM客户程序的.NET对象,由于我们的.NET进程外组件需要调用几个COM库的API,因此在ComHelperClass里面原创 2009-02-21 15:26:00 · 3721 阅读 · 2 评论 -
为什么连接字符串一定要用StringBuilder(介绍CLR Profiler)
当然啦,很多人开始学习C#的时候,就已经听到过来自多方的警告,连接字符串的时候一定要用StringBuilder,不要使用String直接连接的方式,而且也都知道其中的原因,例如什么因为String是一个固定的变量,不能更改,每一次String连接的操作实际上都是创建了一个新的String实例。可能很少有人知道具体的数据是什么,因为我们不能尽信书本上说的,一定要有一些实验数据才可以。 让我原创 2009-03-10 01:19:00 · 2965 阅读 · 2 评论 -
引起FileNotFoundException原因通用分析过程
有的时候,你在双击一个托管程序,或者使用Assembly.Load方法加载一些Assembly的时候,CLR会抛出System.FileNotFoundException,这种异常经常让人误解。例如有一个托管程序A,引用了dll B,虽然A和B都在同一个文件夹里面,但是当你试图运行A的时候,还是会有类似下面的异常抛出来:Unhandled Exception: System.I原创 2009-03-10 01:24:00 · 3693 阅读 · 0 评论 -
让人混淆的UnmanagedType.LPStruct列集指令(翻译)
原始文献地址:http://blogs.msdn.com/adam_nathan/archive/2003/04/23/56635.aspx 在列集有多种非托管表现形式的托管数据类型时,MarshalAsAttribute属性可以改变列集(Marshaling)行为。一般来说,使用MarshalAsAttribute的难点是如何在它的构造函数里面选择正确的UnmanagedType枚举翻译 2009-03-15 17:18:00 · 1668 阅读 · 0 评论 -
在WebBrowser控件中获取鼠标在网页上点击的位置
在WebBrowser控件中获取鼠标在网页(不是浏览器窗口)上点击的位置,只有代码了,没有讲解: private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) { webBrowser1.Document原创 2009-07-13 01:17:00 · 3848 阅读 · 1 评论 -
使用ListBox控件来实现直方图控件
最近在做一个WPF方面的项目,需要用到一些统计功能,需要制作一些直方图和线状图。一般来说,传统的直方图和线状图的编写方法都是:1. 确定X轴和Y轴,把刻度分别在X轴和Y轴上画出来。2. 画出X轴和Y轴,比如分别加上两个箭头之类的装饰品。3. 然后根据Y值,a. 对于直方图,将Y值转换为直方图里面矩形的高度,根据X值确定矩形在X轴的位置原创 2009-07-16 16:55:00 · 2350 阅读 · 0 评论 -
使用ListBox控件来实现直方图控件(二)
前一篇文章里面讲到了实现一个直方图控件所要注意的问题,既然是一个控件,那么需要先将给用户调用的API调用出来。如果读者有使用Office Excel的经验的话,就会发现,制作一个直方图,实际上只需要显示直方图的数据就可以了,如下图所示: 上图,再分解一下,可以看到每一个Series是一个系列的数据(比如一个数组);而每一个Category可以看成是用来识别一个数据的标识(例如数组的下标原创 2009-07-22 17:20:00 · 2984 阅读 · 4 评论 -
在WPF中使用ItemsControl控件来实现线状图控件(一)
在前面的文章里面提到了如何使用ItemsControl编写一个直方图控件(还没有写完,今天因为有急用就先写线状图的编写方法了),因此在阅读这篇文章之前,推荐先阅读下面几篇文章:1. 使用ListBox控件来实现直方图控件(一)2. 使用ListBox控件来实现直方图控件(二)3. 使用ListBox控件来实现直方图控件(三)4. 使用原创 2009-07-27 16:57:00 · 7580 阅读 · 0 评论 -
使用ListBox控件来实现直方图控件(三)
洋洋洒洒几千言以后,在前一篇文章的最后终于看到一丝曙光了— 至少有一个看起来像直方图的玩意了。使用ItemsControl来实现直方图有以下几个优点:1. 省去了手工布局X轴坐标上刻度的问题,否则的话,我们必须写类似下面的代码来布局X轴坐标的刻度。 double tickMarkWidth = LineChart.ActualWidth / CategoryTickM原创 2009-07-24 18:41:00 · 2229 阅读 · 0 评论 -
应用程序调试技术视频各集技术概述
这是第一部分,Windows平台下的应用程序调试技术讲座视频, 视频购买地址:http://product.china-pub.com/3502590 第1讲 准备调试环境 调试符号文件的作用; 创建符号文件的方法; 在调试器里有无符号文件的区别; 公开符号版本和私有符号版本的区别; 创建公开符号文件的方法;原创 2012-03-01 15:34:51 · 4875 阅读 · 0 评论 -
C#语法造成的小问题(编译原理知识)
昨天跟看到一篇帖子,说的是C#里面针对byte类型的计算,+号操作符和+=操作符对于数据类型的隐式转换有两种不同的处理方式,例如下面的代码是不能编译通过的:using System; public class ByteOp{ public static void Main() { byte b = 1; b =原创 2009-02-17 21:45:00 · 5783 阅读 · 8 评论 -
用C#编写一个进程外的COM组件
我在以前的一篇文章《COM互操作 - 在VB 脚本里面使用.NET类型》里面写过如何在COM客户端程序里面使用.NET组件,但是这些.NET组件都属于进程内的组件,即COM客户端需要将CLR和.NET组件都加载进自身进程的内存空间里面才能使用。上一次在MSDN中文论坛上看到有网友问如何使用C#编写一个进程外的COM组件,由于在使用regasm.exe注册.NET组件的时候,regasm.exe将.原创 2009-02-20 18:56:00 · 3898 阅读 · 0 评论 -
列出.NET程序所依赖的Assembly
有的时候你可能会碰到.NET程序在发布机上不能启动的问题,.NET程序告诉你有的Assembly不能加载,你想看看.NET程序到底依赖于哪些Assembly的话,可以试一下下面的程序(注意:你只能在可以执行这个.NET程序的机器上运行下面的程序):1. using System;2. using System.Collections.Generic;3. using S原创 2009-02-16 17:51:00 · 2971 阅读 · 0 评论 -
.NET常见线程简介
原文地址:http://blogs.msdn.com/tess/archive/2005/12/20/505862.aspx 当你分析一个dump文件的时候,调试里面最艺术的地方就是知道哪些东西是可以忽略的,而哪些是你想要的东西。 特别是在你分析一个程序停止响应(hang)的bug时,了解这些常见线程对你非常有帮助,浏览线程各堆栈列表的时候,你可以知道不是这个线程出问题了,也不是那翻译 2009-01-30 10:41:00 · 3166 阅读 · 2 评论 -
如何编译同时引用两个不同版本的Assembly的C#程序
症状:请看下面三个代码以及对应的编译步骤,能看出什么问题出来吗?ITest.cs:1. using System;2. 3. public interface ITest4. {5. void TestMethod();6. }原创 2009-02-01 12:29:00 · 4603 阅读 · 0 评论 -
COM互操作 - 在VB 脚本里面使用.NET类型
请看下面这段VBS代码:Set obj = CreateObject("System.Collections.ArrayList")obj.Add("this is a test")obj.Add(1)obj.Add(obj) Msgbox obj(0)Msgbox obj(1)Msgbox obj(2).ToString()原创 2009-02-06 00:04:00 · 2609 阅读 · 0 评论 -
使用Signature Tool自动生成P/Invoke调用Windows API的C#函数声明
在网上看到很多网友在.NET程序中调用Win32 API,或者调用自己的VC DLL里面提供的函数的时候,总是被生成正确的C函数在C#中的正确声明而困扰,而生成C++中结构体在C#中的声明 - 天,没有什么比这个更让人恶心的事情了。因为:1. 如果你的结构体里面包含 TCHAR字符串成员的话,需要考虑ANSI和Unicode DLL的情形。2. 如果你的结构原创 2009-02-05 20:53:00 · 41555 阅读 · 43 评论 -
Windows的用户管理中的用户模拟
用户模拟(Impersonation)是自从Windows 2000时引入的强大的功能。Windows系统甚至允许用户模拟(Impersonation)被用在客户端/服务端的编程模型里面。 在传统模式下,比如一个远程服务器可以提供文件、打印机或者数据库服务,希望使用这些资源的客户端可以发送一个请求给远程服务器,这时候,远程服务器必须要确保客户端有权限来访问它请求的资源,于是远程服务器查询原创 2009-02-06 20:34:00 · 2909 阅读 · 0 评论 -
WPF中实现ListView控件绑定到多个数据源的并集
WPF里面的数据绑定功能很强大,让你可以用一种非常直观的方式显示和编辑数据,但是仍然会有一些地方让人容易混淆,例如将ListView控件绑定到多个数据源的并集上。 例如你的窗口里面有三个ListView控件A、B、C,A和B分别绑定到整数集合CollectionA和集合CollectionB,然后你想将C绑定到CollectionA和CollectionB的并集上面去,这个时候很明显你不想原创 2009-02-08 00:05:00 · 7318 阅读 · 2 评论 -
通过代码创建DataTemplate
有的时候在XAML里面创建一个通用的DataTemplate比较麻烦,例如在DataTemplate里面有一个控件需要绑定到不同的属性里面,例如下面的代码: CellTemplate="{StaticResource TestDataTemplate}"/>原创 2009-02-08 19:11:00 · 5101 阅读 · 0 评论 -
COM套间对.NET程序使用COM对象的影响(上)
在COM时代里,套间是用来简化多线程环境下使用COM对象的,然而在.NET里面,微软又放弃了套间的概念,这样给我们在.NET里面使用COM对象的时候造成了很多的麻烦。例如有的时候你会发现在有的线程里面创建了COM对象并将它的引用保存在全局变量里面,在其他的线程里面使用的时候,却发现.NET扔出一个InvalidCastException的异常,发生这种情况大多数都是因为两个.NET线程运行在不同的原创 2009-02-10 23:06:00 · 1550 阅读 · 0 评论 -
COM套间对.NET程序使用COM对象的影响(中)
COM里面,套间是一个 想象中的边界,用来在多线程环境中安全使用线程安全和线程不安全的COM对象。什么叫做线程安全的COM对象呢?再多线程环境中,如果这个COM对象自己实现了同步机制,可以被多个线程同时调用而不破坏对象内部数据的完整性的话,那么这个对象就叫做线程安全的对象。然而COM对象有一个目标就是,即使在多线程环境里面也可以安全地使用线程不安全的COM对象。也就是说,即使COM对象内部没有实现原创 2009-02-11 13:45:00 · 1565 阅读 · 0 评论 -
COM套间对.NET程序使用COM对象的影响(下)
由于所有的COM对象都会被分配到一个相应的套间里面,因此在.NET里面,为了方便.NET程序调用COM对象,每一个.NET线程都会被分配到一个套间里面――即使你没有在代码里面指定线程运行的套间。在.NET线程里面创建的COM对象都会被分配到特定的套间里面,如果两个.NET线程 被分配到了不同的套间里,那么两个线程之间互相调用COM对象就需要列集函数调用。在.NET 2.0以后,默认情况下.NE原创 2009-02-12 18:18:00 · 1418 阅读 · 0 评论 -
应用程序调试技术视频观看指南
这是第一部分,Windows平台下的应用程序调试技术讲座视频, 视频购买地址:http://product.china-pub.com/3502590 对于研发公司IT支持人员,项目或开发经理,设置事后可跟踪的BUG跟踪以及分析服务系统,建议选择观看:1、应用程序调试技术第1讲 准备调试环境2、应用程序调试技术第2讲 管理符号文件与源代码3、应用程序调原创 2012-03-01 15:35:50 · 5312 阅读 · 0 评论