我试图在没有 MFC/ATL 帮助的情况下了解创建/使用 COM 组件以了解其内部工作原理。我正在使用这篇 codeguru 文章作为参考。以下是我遵循的步骤。
- 创建了一个Wind32 Dll,
- 添加了一个 MIDL 文件并声明了接口
IAdd
和库名称DemoMath
;使用 MIDL 编译器编译代码。 - 创建
CAddObj
类派生接口,IAdd
提供接口的实现。IAdd
IUnknown
- 创建
CAddFactory
从接口派生的类IClassFactory
;提供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 文件时生成的(虽然我没有找到它)?