







代码很简单,就是调用了QueryInterface方法去获得DirectDraw7的接口指针。然而我第一眼看过去的时候,总
是觉得有点别扭。大家再看一下,我昨天实现第一个COM对象的时候override的QueryInterface方法:














我觉得别扭是因为第二个参数少了个dereference操作符,尽管LPVOID就是void *,但是通过使用typedef关键字
接着就是一个感觉很低级的问题了:QueryInterface为什么要使用指针的指针作为参数呢?直接用指针不行吗?如果仅仅是为了在函数体中能够改变参数,使用指针就足够了。那是因为什么呢?我们从如下形式的QueryInterface方法来看:



第一,ppvObject这个参数的含义是接口指针的地址(Address of a pointer to fill with the interface
pointer)。从这个角度而言,第二种函数形式就更为容易理解了,由于"*"为解引用操作符,作用于ppvObject,得到的类型正好就是一个接口指针了(与LPVOID相对应);第二,QueryInterface如果执行成功,就会将相应的接口指针赋给参数*ppvObject,如果仅仅是传递接口指针本身,而非接口指针的地址,就无法在函数体中对其进行赋值了。大家看以下代码:















(Test.hpp)







































PS:其实这是一个很简单的问题,但是通过摸索让自己对双重指针有了进一步的认识,以前就知道双重指针的定义就是指针的指针,至于它为什么会存在,一点想法都没有。在瞎胡闹的过程中,同时还强化了一个概念,就是运算符的优先级,类型转化的优先级要比"->"和"."要低。
我还是C++方面的菜鸟,各位高手看了,笑笑就好了,别笑太大声哦。 :)