windows
meteor1113
c ,emacs,mac
展开
-
Com中BSTR的使用
BSTR:BSTR(BasicSTRing)实际上是类Pascal字符串,在BSTR的前4个字节保存了字符串长度,所以BSTR内部可以包括/0,它也不是靠/0来判断字符串结尾的。BSTR在c/c++中的定义实际上是wchar_t*,但因为BSTR是依靠前4个字节来判断字符串长度的,所以它的分配和释放都不同于普通的字符串,需要通过::SysAllocString和::SysFreeS原创 2009-07-15 11:35:00 · 2005 阅读 · 2 评论 -
com组件和多接口
以前一直都认为一个dll(或者exe)就是一个com组件,dll里面不同的类就是不同的接口,CLSID就是用来标识一个dll或exe的。其实这种看法是错误的!!!组件不一定就是一个dll,一个dll中可以包含很多个组件,而且一般见到的dll里也不止包含一个组件,一个dll里的每个组件都有自己的CLSID和ProgID。对于ATL工程来说,一个ATL Object就是一个组件,很明显原创 2009-07-15 11:44:00 · 808 阅读 · 0 评论 -
0xcd(205)问题
昨天调试SLanAgent时碰到一个很奇怪的问题。SLanServer和SLanAgent都用Debug版运行,取得Agent的各种数据,一直跑得很好。但是用python写了一个测试程序,从SLanAgent取得OSInfo,在解析OSVersion和OSMend时一直出错。SLanAgent是采用utf-8传输字符串的。python中取得字符串后也使用utf-8解析了,但是pytho原创 2009-07-15 11:43:00 · 2304 阅读 · 0 评论 -
Com中内存申请和释放的规范
根据COM规范,输入型参数由调用方申请和释放内存。输出型参数由被调用方申请内存,由调用方释放内存。输入和输出型参数,由调用方申请内存,被调用方可以释放并重新申请内存,最终由调用方释放内存。原创 2009-07-15 11:36:00 · 784 阅读 · 0 评论 -
safearray的使用
com中要传递数组, 在c++甚至是VJ++之间可以直接使用标准c++数组, 但是要把数组传递给VB, 则要使用safearray.safearray比一般的简单数组功能强大, 但使用起来也更复杂. Win32提供了一组API来操作safearray,但是这些API很不容易使用, 所以VC和CB都有专门的类封装了safearray的操作.CB中提供的是TSafeArray类, 这是一个原创 2009-07-15 11:37:00 · 2835 阅读 · 1 评论 -
windows内核对象名字空间
Windows的内核对象, 包括events, semaphores, mutexes, waitable timers,file-mapping objects, and job objects. 这些对象都有名字空间的, 默认情况下名字可以在多个进程之间共享,但是如果在终端服务中, 是无法看到console上的名字的. 要想在终端服务和console之间共享内核对象,就必须在名字上原创 2009-07-15 11:37:00 · 827 阅读 · 0 评论 -
windows的线程互斥和同步
这几天的调查终于明白了,互斥和同步并不是一个概念。互斥是为了防止多个线程访问同一个对象,造成对象状态不一致。同步是为了控制各个线程执行的顺序的。windows提供了下面几个机制来实现互斥和同步:临界区(critical session),互斥(mutex),事件(event),信号灯(semaphore)。其中,临界区只能在同一个进程之中使用,所以它的效果很高。而其它三个对象属于w原创 2009-07-15 11:42:00 · 1009 阅读 · 0 评论