本文章介绍了如何使用C++语言来创建COM(Component Object Model)组件的方法和技术,旨在帮助开发者更好地理解和运用COM技术。
COM(组件对象模型)是一种接口技术,它提供了一种方法使客户程序能够调用。关于COM原理和技术的文章已经有很多了,在这里不再过多讲解。本段落将着重于实现过程,并通过编码步骤来清晰地展示如何创建一个进程内COM组件,目的是让客户程序可以通过COM接口调用DLL中的函数。
首先,我们需要创建一个标准的Win32 DLL项目(例如命名为mycom)。以下是DllMain入口的具体实现:
```c++
DWORD g_dwAttachedProcesses = 0L; // 进程附加次数
DWORD g_dwPageSize = 0L; // 系统页面大小
HINSTANCE g_hInstance = 0L; // 实例句柄
LONG g_cLock = 0L; // 活动对象数量
BOOL APIENTRY DllMain( HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved )
{
BOOL fRetVal = FALSE;
SYSTEM_INFO SystemInformation;
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
fRetVal = TRUE; // 假设初始化成功
if (!g_dwAttachedProcesses) // 当第一个进程附加时进行一次性初始化
{
g_hInstance = (HINSTANCE)hModule;
if(!g_dwPageSize)
{
GetSystemInfo(&SystemInformation); // 获取系统页面大小,此操作不会失败
g_dwPageSize = SystemInformation.dwPageSize;
}
}
}
return fRetVal;
}
```