自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Donjuan的专栏

只专注技术管理

  • 博客(26)
  • 资源 (4)
  • 收藏
  • 关注

原创 用C#编写一个进程外的COM组件示例代码讲解

代码的链接在《用C#编写一个进程外的COM组件》,小技巧:如果你要同时看示例代码和讲解的话,可以用浏览器分别打开示例代码和这篇文章,然后使用Windows提供的纵向平铺窗口功能就可同时看两篇文章了。 TestComVisibleClass.cs里面定义了我们要发布给COM客户程序的.NET对象,由于我们的.NET进程外组件需要调用几个COM库的API,因此在ComHelperClass里面

2009-02-21 15:26:00 3690 2

原创 用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 3852

原创 VC编写的程序不能在其他机器上运行的解决方案(续)

我在前面的文章里面提到由于side-by-side问题导致的VC编写的程序不能正常启动的问题的解决方案,这种方法是针对于单个可执行文件的解决方案,但是有的时候你可能会碰到另外一种情况—也是由于side-by-side问题导致的,你的程序支持插件,当你的程序试图加载一个依赖于CRT的DLL的时候,Windows告诉你不能加载DLL。 比如微软在06年发布了CLR的开源版本,你在自己机器上用V

2009-02-19 20:40:00 2226

原创 调试时设置条件断点

一个好的调试器,能够帮助程序员处理很多自动化的工作。试想下列的情形:1.         错误是发生在一个循环当中,只在循环遍历了若干次以后,才会出现。2.         错误只在程序中某个变量为一个特定的值,才会出现,而这个变量的值是在程序运行的过程中随机设置的。3.         多个线程都要调用同一个函数,而你只想在某几个线程执行这个函数的时候,中断程序的执行。在上面列出

2009-02-18 18:43:00 12000

原创 C#语法造成的小问题(编译原理知识)

昨天跟看到一篇帖子,说的是C#里面针对byte类型的计算,+号操作符和+=操作符对于数据类型的隐式转换有两种不同的处理方式,例如下面的代码是不能编译通过的:using System; public class ByteOp{    public static void Main()    {        byte b = 1;        b =

2009-02-17 21:45:00 5717 8

原创 列出.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 2923

原创 VC编写的程序不能在其他机器上运行的解决方案

有的时候,你在Visual C++上面经过好几个月的辛勤努力,终于将程序编写完成并且测试完毕,然而当你试图在客户的发布机上运行刚写好的程序时,有可能会碰到类似下面的错误,操作系统告诉你“由于应用程序配置不正确,应用程序未能启动。重新安装应用程序可能会纠正这个问题”:一般情况下,这个问题都是由于程序不能找到所需要的C运行库(CRT)而引起的。 在Windows XP SP2以后,

2009-02-15 21:41:00 1841

原创 调试存储过程

Visual Studio提供了存储过程调试功能,你可以在Visual Studio里面直接调试存储过程里面的T-SQL语句,察看存储过程局部变量的值,以及设置断点等等。 这里是设置过程和操作步骤:1.         启动Visual Studio,并且点击菜单里面的“ 工具(Tools)”à “连接到数据库(Connect To Database)”。2.         在弹

2009-02-14 17:11:00 1683

原创 调试WPF数据绑定(Data Binding)错误

WPF的数据绑定功能很强大,允许你在Xaml文件里面直接指定控件要绑定数据的属性,甚至可以绑定到一个函数的返回值里面。但是强大方便的背后是增加的调试的难度,有的时候你给出了错误的Binding Source和Path,在界面上显示的结果就是一片空白,很难搞明白是什么地方设置错了。WPF数据绑定内建了跟踪机制。调试程序的时候,如果 数据绑定发生错误的时候,WPF会在Visual Studio

2009-02-13 18:18:00 3332

原创 COM套间对.NET程序使用COM对象的影响(下)

由于所有的COM对象都会被分配到一个相应的套间里面,因此在.NET里面,为了方便.NET程序调用COM对象,每一个.NET线程都会被分配到一个套间里面――即使你没有在代码里面指定线程运行的套间。在.NET线程里面创建的COM对象都会被分配到特定的套间里面,如果两个.NET线程 被分配到了不同的套间里,那么两个线程之间互相调用COM对象就需要列集函数调用。在.NET 2.0以后,默认情况下.NE

2009-02-12 18:18:00 1393

原创 COM套间对.NET程序使用COM对象的影响(中)

COM里面,套间是一个 想象中的边界,用来在多线程环境中安全使用线程安全和线程不安全的COM对象。什么叫做线程安全的COM对象呢?再多线程环境中,如果这个COM对象自己实现了同步机制,可以被多个线程同时调用而不破坏对象内部数据的完整性的话,那么这个对象就叫做线程安全的对象。然而COM对象有一个目标就是,即使在多线程环境里面也可以安全地使用线程不安全的COM对象。也就是说,即使COM对象内部没有实现

2009-02-11 13:45:00 1533

原创 COM套间对.NET程序使用COM对象的影响(上)

在COM时代里,套间是用来简化多线程环境下使用COM对象的,然而在.NET里面,微软又放弃了套间的概念,这样给我们在.NET里面使用COM对象的时候造成了很多的麻烦。例如有的时候你会发现在有的线程里面创建了COM对象并将它的引用保存在全局变量里面,在其他的线程里面使用的时候,却发现.NET扔出一个InvalidCastException的异常,发生这种情况大多数都是因为两个.NET线程运行在不同的

2009-02-10 23:06:00 1523

原创 调试器基础

在Windows中,Windows API CreateProcess提供了一个枚举值允许你的程序调试其他的程序,比如下面的代码就是创建一个调试器的最基本的步骤:1.         启动一个程序,并指定你希望调试这个程序—例如DEBUG_PROCESS2.         然后监听Windows给你的程序发送的各种调试消息,例如被调试程序正在加载一个新的DLL(不管是静态调用还是动态调用

2009-02-10 00:41:00 1513

原创 通过代码创建DataTemplate

有的时候在XAML里面创建一个通用的DataTemplate比较麻烦,例如在DataTemplate里面有一个控件需要绑定到不同的属性里面,例如下面的代码:                                        CellTemplate="{StaticResource TestDataTemplate}"/> 

2009-02-08 19:11:00 5066

原创 WPF中实现ListView控件绑定到多个数据源的并集

WPF里面的数据绑定功能很强大,让你可以用一种非常直观的方式显示和编辑数据,但是仍然会有一些地方让人容易混淆,例如将ListView控件绑定到多个数据源的并集上。 例如你的窗口里面有三个ListView控件A、B、C,A和B分别绑定到整数集合CollectionA和集合CollectionB,然后你想将C绑定到CollectionA和CollectionB的并集上面去,这个时候很明显你不想

2009-02-08 00:05:00 7261 2

原创 Windows的用户管理中的用户模拟

用户模拟(Impersonation)是自从Windows 2000时引入的强大的功能。Windows系统甚至允许用户模拟(Impersonation)被用在客户端/服务端的编程模型里面。  在传统模式下,比如一个远程服务器可以提供文件、打印机或者数据库服务,希望使用这些资源的客户端可以发送一个请求给远程服务器,这时候,远程服务器必须要确保客户端有权限来访问它请求的资源,于是远程服务器查询

2009-02-06 20:34:00 2853

原创 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 2536

原创 使用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 41139 43

原创 不能设置断点的检查步骤

在调试程序的时候,有的时候你会发现设置的断点不起作用,而且更糟糕的是,一般碰到这种情况的时候都是非常紧急或者是加班到夜已深、人寂静的时候了。正是应了那句玩笑话:“机器机器,越急越气!”。一般发生断点不起作用的话:1.         你首先要判断的是断点是否真的设置上了?a)         如果在Visual Studio里面,你的断点符号是一个实心圆,那么断点的确是设置上了,你要判断的

2009-02-05 00:06:00 17949 7

原创 拷贝代码以及其行号的脚本

有的时候你需要打印源代码和源代码的行号,或者将源代码及其行号拷贝到其他文档中,例如将源代码拷贝到Word,你希望得到类似下面的结果:1. using System;2. using System.Collections.Generic;3. using System.Configuration;4. using System.Data;5. using Syst

2009-02-03 14:43:00 2244

原创 解决LoadImage加载图片报告内存不足的错误

在使用Win32 API LoadImage加载大量图片,或者加载很大的图片的时候,你可能会碰到图片加载失败,而且调用GetLastError显示错误是“内存不足,无法完成此操作!”,打开任务管理器,却发现系统里面还有大量的内存空闲。比如使用下面的代码你就会碰到这个错误—当然你要准备大量的BMP图片:#include "StdAfx.h"#include "SampleBa

2009-02-02 22:19:00 6077

原创 Windows里面异常实现机制简介

标题党,请参考我的这篇文档:http://blog.csdn.net/Donjuan/archive/2009/02/02/3859160.aspx

2009-02-02 22:18:00 1529

原创 理解First Chance和Second Chance避免单步调试

在现在C++、Java、.Net代码大行其道的时候,很多代码错误(Bug)都是通过异常的形式表现出来的。由于工期紧或者种种原因,很多程序员在碰到程序发生未处理的异常的第一反应就是try … catch (Exception e) { … }。然而代码开发到后期的时候,这种简单粗暴的解决代码错误(Bug)的方式就会在其他不相干的地方表现出来,有的时候甚至导致程序随机的不稳定,而且很难调试。比如执行下

2009-02-02 22:15:00 15128 7

原创 使用CRT调试内存分配堆来找出未释放的内存空间

忘记释放已经分配的内存是一种常见的编程错误,当然我指的是在C++编程当中,例如下面的代码里面就存在一个忘记释放内存的编程错误。我个人觉得忘记释放内存的编程错误是不可避免的,毕竟程序员都是人,困了,心情不好了,代码过于复杂啦等等都可能导致忘记加上一句delete XXX语句。// 未释放内存空间.cpp : Defines the entry point for the cons

2009-02-02 22:12:00 3731 1

原创 强签名的由来和作用

在网上,看到很多初学.NET的网友经常问,强签名是什么,它的作用是什么?一句话,强签名就是唯一标识一个Assembly文件的名称。它由Assembly的文件名、版本号、区域信息、公钥信息和处理器架构信息组成,这样做是为了避免以前Windows里面的DLL HELL问题。 在强名以前,如果一个DLL升级覆盖了老版本的DLL,有可能会导致系统里面一些依赖老版本的DLL程序出现兼容型的问题。这是

2009-02-02 21:55:00 16022

原创 如何编译同时引用两个不同版本的Assembly的C#程序

症状:请看下面三个代码以及对应的编译步骤,能看出什么问题出来吗?ITest.cs:1. using System;2. 3. public interface ITest4. {5.     void TestMethod();6. }

2009-02-01 12:29:00 4542

开发人员技能清单

文章: 我为什么反对寄希望于内部培训提升员工技能的方法? 的辅助下载. 文章链接:http://blog.csdn.net/donjuan/article/details/7483348

2012-04-21

时间管理培训使用的幻灯片下载

以前给公司的新员工做过一次关于实践管理的技巧,这里是当初做的幻灯片。

2010-03-21

版本控制系统进阶--使用VSTF将项目开发流程集成进来到工具当中

自己做的,没有办法上传ppsx文件,所以将后缀名改成了.pptx,下载自己改回来就好了. 讲解了如何使用VSTF管理一个软件开发项目,VSTF实际上将微软的一套成熟的开发流程都集成到工具里面去了,这个PPT就是提供了一个VSTF预览。

2009-08-11

版本控制系统介绍--使用SVN管理你的文档

讲解了版本控制的基本理念,和如何使用SVN管理文档。

2009-08-11

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除