在一个COM例子中,编译出现了错误,这个例子很简单,用vc新建一个Win32 Console Application项目,然后选择An application that supports MFC,然后加入如下函数,并在_tmain()里调用.
TestIActiveDesktop()
... {
WCHAR wszWallpaper [MAX_PATH];
CString strPath;
HRESULT hr;
IActiveDesktop* pIAD;
// 1. 初始化COM库(让Windows加载DLLs)。通常是在程序的InitInstance()中调用
// CoInitialize ( NULL )或其它启动代码。MFC程序使用AfxOleInit()。
CoInitialize ( NULL );
// 2. 使用外壳提供的活动桌面组件对象类创建COM对象。
// 第四个参数通知COM需要什么接口(这里是IActiveDesktop).
hr = CoCreateInstance ( CLSID_ActiveDesktop,
NULL,
CLSCTX_INPROC_SERVER,
IID_IActiveDesktop,
(void**) &pIAD );
if ( SUCCEEDED(hr) )
...{
// 3. 如果COM对象被创建成功,则调用这个对象的GetWallpaper() 方法。
hr = pIAD->GetWallpaper ( wszWallpaper, MAX_PATH, 0 );
if ( SUCCEEDED(hr) )
...{
// 4. 如果 GetWallpaper() 成功,则输出它返回的文件名字。
// 注意这里使用wcout 来显示Unicode 串wszWallpaper. wcout 是
// Unicode 专用,功能与cout.相同。
wcout << L"Wallpaper path is: " << wszWallpaper << endl << endl;
}
else
...{
cout << _T("GetWallpaper() failed.") << endl << endl;
}
// 5. 释放接口。
pIAD->Release();
}
else
...{
cout << _T("CoCreateInstance() failed.") << endl << endl;
}
// 6. 收回COM库。MFC 程序不用这一步,它自动完成。
CoUninitialize();
}
... {
WCHAR wszWallpaper [MAX_PATH];
CString strPath;
HRESULT hr;
IActiveDesktop* pIAD;
// 1. 初始化COM库(让Windows加载DLLs)。通常是在程序的InitInstance()中调用
// CoInitialize ( NULL )或其它启动代码。MFC程序使用AfxOleInit()。
CoInitialize ( NULL );
// 2. 使用外壳提供的活动桌面组件对象类创建COM对象。
// 第四个参数通知COM需要什么接口(这里是IActiveDesktop).
hr = CoCreateInstance ( CLSID_ActiveDesktop,
NULL,
CLSCTX_INPROC_SERVER,
IID_IActiveDesktop,
(void**) &pIAD );
if ( SUCCEEDED(hr) )
...{
// 3. 如果COM对象被创建成功,则调用这个对象的GetWallpaper() 方法。
hr = pIAD->GetWallpaper ( wszWallpaper, MAX_PATH, 0 );
if ( SUCCEEDED(hr) )
...{
// 4. 如果 GetWallpaper() 成功,则输出它返回的文件名字。
// 注意这里使用wcout 来显示Unicode 串wszWallpaper. wcout 是
// Unicode 专用,功能与cout.相同。
wcout << L"Wallpaper path is: " << wszWallpaper << endl << endl;
}
else
...{
cout << _T("GetWallpaper() failed.") << endl << endl;
}
// 5. 释放接口。
pIAD->Release();
}
else
...{
cout << _T("CoCreateInstance() failed.") << endl << endl;
}
// 6. 收回COM库。MFC 程序不用这一步,它自动完成。
CoUninitialize();
}
编译,发生错误.编译错误信息为 error C2065: 'IActiveDesktop' : undeclared identifier .其实在微软的文档中,对此错误已经有了说明,文档号为Q196342,那么到哪去找这个文档呢?网址在 http://msdn2.microsoft.com/zh-cn/aa570318.aspx 搜索Q196342即可.如果没有搜索到,在显示更多搜索选项里扩大范围,文章内容如下:
/**/
/*
http://support.microsoft.com/kb/196342/en-us
PRB: ActiveDesktop Compilation Errors Under Visual C++ 6.0 MFC
View products that this article applies to.
Article ID : 196342
Last Review : June 18, 2001
Revision : 1.0
This article was previously published under Q196342
SYMPTOMS
Under Visual C++ 6.0 Microsoft Foundation Classes (MFC), compiling code related to the IActiveDesktop interface will fail with multip
http://support.microsoft.com/kb/196342/en-us
PRB: ActiveDesktop Compilation Errors Under Visual C++ 6.0 MFC
View products that this article applies to.
Article ID : 196342
Last Review : June 18, 2001
Revision : 1.0
This article was previously published under Q196342
SYMPTOMS
Under Visual C++ 6.0 Microsoft Foundation Classes (MFC), compiling code related to the IActiveDesktop interface will fail with multip