COM - Implementing DllGetClassObject
COM - Implementing DllGetClassObject
我试图在没有MFC/ATL帮助的情况下理解创建/使用COM组件以了解其内部工作原理。我正在使用这篇代码大师文章作为参考。以下是我遵循的步骤。
- 创建了一个 Wind32 dll,
- 添加了一个 MIDL 文件并声明了接口
IAdd
和库名称DemoMath
;使用 MIDL 编译器编译了代码。 - 创建
CAddObj
类派生IAdd
接口,提供IAdd
和IUnknown
接口的实现。 - 创建了从
IClassFactory
接口派生的类CAddFactory
;提供了IClassFactory
方法的实现。
现在创建DllGetClassObject
,为客户端提供一个选项来调用此函数以获取类工厂的实例。
以下是代码:
#include "stdafx.h"
#include <objbase.h>
#include "AddObjFactory.h"
#include "IAdd_i.c"
STDAPI DllGetClassObject(const CLSID& clsid,
const IID& iid,
void** ppv)
{
//
//Check if the requested COM object is implemented in this DLL
//There can be more than 1 COM object implemented in a DLL
//
if (clsid == CLSID_AddObject)
{
//
//iid specifies the requested interface for the factory object
//The client can request for IUnknown, IClassFactory,
//IClassFactory2
//
CAddFactory *pAddFact = new CAddFactory;
if (pAddFact == NULL)
return E_OUTOFMEMORY;
else
{
return pAddFact->QueryInterface(iid , ppv);
}
}
//
//if control reaches here then that implies that the object
//specified by the user is not implemented in this DLL
//
return CLASS_E_CLASSNOTAVAILABLE;
}
现在假设定义CLSID_AddObject
常数在哪里 还是在编译 MIDL 文件时生成的(我没有找到(?
coclass
IDL 项目通常会得到 CLSID:
library Foo
{
//...
[
//...
]
coclass AddObject
{
//...
};
然后在您的"IAdd_i.c"上,您已经包括:
MIDL_DEFINE_GUID(CLSID, CLSID_AddObject, ...);
这就是定义CLSID_AddObject
.
相关文章:
- 没有找到相关文章