太简单的问题了,都不好意思问,但是就搞不定.

allen_zhaozhencn 2004-05-12 08:46:36
刚学COM, 太菜了,不要笑我...

我在一个SDI的InitInstance函数有如下代码:
IActiveDesktop *IAD = NULL;
HRESULT hr;
CString path;
hr = CoCreateInstance(CLSID_ActiveDesktop,
NULL,
CLSCTX_INPROC_SERVER,
IID_IActiveDesktop,
(void**)&IAD
);
if (SUCCEEDED(hr) )
{
IAD->GetWallpaper(path, NULL, 0);
MessageBox(NULL, path, path, MB_OK);
IAD->Release( );
}

在stdafx.h中,加入了
#include""shlobj.h"
#include "COMDEF.H"

编译时老是出现:
C:\Documents and Settings\Administrator.ABC\桌面\com\com.cpp(96) : error C2027: use of undefined type 'IActiveDesktop'
c:\program files\microsoft visual studio\vc98\include\comdef.h(507) : see declaration of 'IActiveDesktop'
C:\Documents and Settings\Administrator.ABC\桌面\com\com.cpp(96) : error C2227: left of '->GetWallpaper' must point to class/struct/union
C:\Documents and Settings\Administrator.ABC\桌面\com\com.cpp(98) : error C2027: use of undefined type 'IActiveDesktop'
c:\program files\microsoft visual studio\vc98\include\comdef.h(507) : see declaration of 'IActiveDesktop'
C:\Documents and Settings\Administrator.ABC\桌面\com\com.cpp(98) : error C2227: left of '->Release' must point to class/struct/union
...全文
41 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
allen_zhaozhencn 2004-05-12
  • 打赏
  • 举报
回复
我已经包含了头文件: #include"shlobj.h". 一样不能通过编译.怪就在这.
XiangDong 2004-05-12
  • 打赏
  • 举报
回复
shlobj.h
eastsun 2004-05-12
  • 打赏
  • 举报
回复

缺乏必要的头文件,比如用tlh或者用import 某个DLL。

VC与VB不一样,一定需要函数的声明才可以使用(声明一般放在头文件中)。否则编译都无法通过。

xenke 2004-05-12
  • 打赏
  • 举报
回复
你查你调用的函数在那个头文件中不就行了,一般包括OAIDL.H,OCIDL.H等,
allen_zhaozhencn 2004-05-12
  • 打赏
  • 举报
回复
谢楼上兄弟.
KyoUs 2004-05-12
  • 打赏
  • 举报
回复
那敢笑啊..........

帮你up
allen_zhaozhencn 2004-05-12
  • 打赏
  • 举报
回复
调用系统的COM,要包括那些头文件,还要作一些什么设置?

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧