描述:
从 MSDN 上的资料来看,CoCreateInstanceEx 实际上是封装了下面 3 个调用的 Helper 函数,首先调用 CoGetClassObject,然后 IClassFactory::CreateInstance 创建一个未初始化的实例,然后 IClassFactory::Release,释放类对象。
现在想做一个函数拦截的程序,拦截上面说的 CoCreateInstanceEx 函数的调用,如果 rclsid 跟相应的 CLSID 相同,则做相应的操作,这个没有问题。但是既然 CoCreateInstanceEx 是上面所说的 3 个调用的封装,按照推断,我拦截 CoGetClassObject 这个函数,应该也可以拦截到与我所要的CLSID相同的调用,可是却拦截不到,函数拦截到了,可以却没有我想要的CLSID,请问这是什么原因?
第二个问题是:MSDN上给出的 CoGetClassObject 的定义为:
STDAPI CoGetClassObject(
REFCLSID rclsid,
DWORD dwClsContext,
COSERVERINFO * pServerInfo,
REFIID riid,
LPVOID * ppv);
但是VS2005里面的定义却是:
WINOLEAPI CoGetClassObject(
IN REFCLSID rclsid,
IN DWORD dwClsContext,
IN LPVOID pvReserved,
IN REFIID riid,
OUT LPVOID FAR* ppv);
第四个参数,一个是COSERVERINFO类型,另外一个却是 LPVOID 类型。请问这是怎么回事?应该以哪个为准?
谢谢!
您可能想查找下面的文章:
- 一个简单问题,以前认为搞懂了,现在却再次糊涂了!关于CoGetClassObject和DllGetClassObject和类厂
- CoGetClassObject内部原理
- CoGetClassObject函数仅仅是用来获取类厂对象的吗?
- 使用IDL文件生成组件注册代码,CoGetClassObject返回E_NOINTERFACE
- 调用CoGetClassObject的时候返回0x80080005,意思是服务器运行失败
- CoGetObject与CoGetClassObject区别
- 所谓的"聚合"就是用CoGetClassObject创建类厂然后创建对象实例吗?
- CoGetClassObject失败但是CoCreateInstance成功,这是为什么?
- CoCretaeInstance失败,但CoGetClassObject成功
- 关于Com的CoGetClassObject函数。