- 博客(29)
- 资源 (19)
- 收藏
- 关注
原创 IDispatch接口 - 跨语言调用
当一个COM接口支持IDispatch的时候(Dual接口),它就可以被其他语言调用。这里我用perl试了一下。perl测试代码use warnings;use strict;use Win32::OLE;use constant ADS_UF_ACCOUNTDISABLE => 2;use constant ADS_SCOPE_SUBTREE => 2;my $MyCo
2014-09-24 12:08:10 1626
原创 IDispatch接口 - Dual和Custom
当用ATL向导来创建一个接口的时候,向导会让我们选择Dual或者Custom.那么它们到底有什么分别呢?Dual鼠标移上去,其实是有个说明的。下面的截图没有显示后面的一些文字,实际意思是说这个接口同时支持IDispatch方式和vtable方式,这大概也就是双接口(Dual)名字的来源。vtable调用方式,指的是直接通过接口指针的虚函数表。比如CComPtr spCar;
2014-09-24 11:59:35 2073 1
原创 IDispatch接口 - CComDispatchDriver智能指针
前面一篇文章讲述了怎么样通过GetIDsOfNames和Invoke来调用一个支持Idispach的COM组件。
2014-09-23 17:04:57 2929
原创 IDispatch接口 - GetIDsOfNames和Invoke
IDispatch接口是COM自动化的核心。其实,IDispatch这个接口本身也很简单,只有4个方法: IDispatch : public IUnknown { public: virtual HRESULT STDMETHODCALLTYPE GetTypeInfoCount( /* [out] */ __RPC__out
2014-09-23 10:58:15 15214
原创 Windows Minifilter驱动 - 获取进程ID, 进程名字和线程ID (5)
在minifilter里面可能有好几种获取调用进程id,名字和线程的办法。我这里有一种:使用PsSetCreateProcessNotifyRoutine 和PsSetLoadImageNotifyRoutine这是两个API,我们可以借助它们获取进程信息。具体看:http://msdn.microsoft.com/en-us/library/windows/hardware/
2014-09-22 14:43:20 8434 3
原创 虚拟内存(VirtualAlloc),堆(HeapAlloc/malloc/new)和Memory Mapped File
内存管理有三种方式:1. 虚拟内存,VirtualAlloc之类的函数2. 堆,Heapxxx函数,malloc,new等3. 内存映射文件,Memory Mapped File很多人都会困惑,但是看下面的图片就会比较明白了。这个图片从MSDN上拷来。堆和虚拟内存,从上面的图片就可以看出,其实所谓的堆,也就是在虚拟内存上抽象出来的。如果直接用Virtualxxx系列函数,是
2014-09-19 16:44:38 8071 6
转载 虚拟内存官方资料MSDN
仔细阅读,http://msdn.microsoft.com/en-us/library/ms810627.aspx
2014-09-19 16:17:49 1059
原创 Windows Minifilter驱动 - 调式 (4)
写任何程序动态调试是非常重要的。驱动开发也不例外。通常现在写驱动的时候,都是在VM上跑的,调试手段基本也是本地windbg + 虚拟机。虚拟机配置我用的是win7,第一步,看下面。成功执行后,会提示:The entry was successfully copied to {xxxxxxxxxxxxxxxxxxx}第二步:输入bcdedit /dbgsettin
2014-09-18 18:25:52 2794
原创 Windows Minifilter驱动 - DriverEntry (3)
驱动里面的DriverEntry就相当于main()或者DllMain()函数,这是个入口点。当驱动被加载的时候,
2014-09-18 11:26:50 3220
原创 再议访问者模式 - Visitor vs Acyclic Visitor
传统访问者模式 VS 无环访问者模式 (ACyclic Visitor)
2014-09-16 15:23:43 2721
原创 再议工厂模式(Abstract Factory)和DIP的关系
大多数人说的工厂模式,应该是指GOF设计模式里面的Abstract Factory模式。这是一种hen
2014-09-16 12:09:55 1800 2
原创 COM 初始化
COM 初始化,说简单很简单,说复杂,有些时候还真不简单。首先,CoInitialize(NULL)和CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);是一样的。我们尽可能使用CoInitializeEx来初始化COM比较好。STA套间调用CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);,
2014-09-15 17:23:54 5218
原创 Active Object模式
ActiveObject模式,很古老,但是在某些场合又很有威力。可以用一个单线程来控制多任务。通常配合Command模式使用。
2014-09-15 14:32:33 4287 1
原创 Abstract Server模式
Abstract Server是一个很简单的模式,很多时候大家都在用,只是没有去总结。Uncle Bob提出了这个概念(见Agile Software Development)。Abstract Server相关的一些概念还是很重要的,也很有启发。通常,Abstract Server就直接体现了DIP(依赖倒置)。DIP是一个很重要的概念。往往遵守DIP原则的代码灵活性会更好。
2014-09-10 18:46:10 1766
原创 COM连接点 - 一个COM接口实现多个连接点(3)
之前讲到一个COM接口可以实现多个连接点。我们就来写个例子。其实,我还真不知道怎么用ATL
2014-09-05 14:26:33 2465
OSX服务端+iphone客户端 网络通信小程序
2013-05-16
封装了一个带上下刷新功能的table(UITableView子类)
2012-12-28
WDM驱动-完成例程
2012-12-21
使用DeviceIoControl进行通信(直接方式)
2012-11-23
缓冲区方式WDM驱动例子
2012-11-22
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人