在一个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(); }
编译,发生错误.编译错误信息为 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