如何判断是否使用了COM?

来源:百度知道 编辑:UC知道 时间:2024/09/20 07:22:56
::CoInitialize( NULL );

HRESULT hr;
// {000209FF-0000-0000-C000-000000000046} = word.application.9
CLSID clsid = {0x209ff,0,0,{0xc0,0,0,0,0,0,0,0x46}};
LPOLESTR lpwProgID = NULL;

hr = ::ProgIDFromCLSID( clsid, &lpwProgID );
if ( SUCCEEDED(hr) )
{
::MessageBoxW( NULL, lpwProgID, L"ProgID", MB_OK );

IMalloc * pMalloc = NULL;
hr = ::CoGetMalloc( 1, &pMalloc ); // 取得 IMalloc
if ( SUCCEEDED(hr) )
{
pMalloc->Free( lpwProgID ); // 释放ProgID内存
pMalloc->Release(); // 释放IMalloc
}
}

::CoUninitialize();
这个程序使用了COM么?
虽然有CoInitialize和CoUninitialize,但去掉一样可以运行
我不明白,什么样的程序才算是用了COM

HRESULT hr = ::CoInitialize(NULL);

if ( S_FALSE == hr )
{
::MessageBox(NULL,"COM已经初始化过了!","提示",MB_OK);
}
参见MSDN中CoInitialize的说明:
Return Values
This function supports the standard return values E_INVALIDARG, E_OUTOFMEMORY, and E_UNEXPECTED, as well as the following:

S_OK
The COM library was initialized successfully on this apartment.
S_FALSE
The COM library is already initialized on this apartment. (COM library 已经初始化过了!)