在VC6.0中使用COM失败

Vinc 2008-03-15 10:57:20
前几天在一个网站(http://blog.csdn.net/killer000777/archive/2007/09/21/1794941.aspx)上看到使用VB.NET调用迅雷下载COM的功能(使用ThunderAgent 1.0 Type Libary)的代码,参照一些网站上的说明我写了下面的代码.
代码如下:
// kjkjkjkDlg.cpp : implementation file
//

#include "stdafx.h"
#include "kjkjkjk.h"
#include "kjkjkjkDlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

#import "D:\\Program Files\\Thunder Network\\Thunder\\ComDlls\\ThunderAgent_Now.dll" no_namespace
//编译后在DEBUG目录下生成了ThunderAgent_Now.tlh和ThunderAgent_Now.tli文件
//已经将它们导入到工程中
//coclass Agent ID{1622f56a-0c55-464c-b472-377845def21d}
//interface IAgent ID{1adefb0d-0ffa-4470-8ab0-b921080f0642}
DEFINE_GUID(CLSID_Agent,0x1622f56a,0x0c55,0x464C,0xB4,0x72,0x37,0x78,0x45,0xDE,0xF2,0x1D);
DEFINE_GUID(IID_IAgent,0x1adefb0d,0x0ffa,0x4470,0x8a,0xb0,0xb9,0x21,0x08,0x0f,0x06,0x42);

/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About
//.......
//.......
void CKjkjkjkDlg::OnButton1()
{
// TODO: Add your control notification handler code here
IAgent* pAgent;
HRESULT hResult=CoInitialize(NULL);
if(hResult!=S_OK){
MessageBox("error in initialize com!");
PostQuitMessage(0);
}
else

{
hResult=CoCreateInstance(CLSID_Agent,
NULL,
CLSCTX_INPROC_SERVER,
IID_IAgent,
(void**)&pAgent);
if(hResult!=S_OK){
MessageBox("error in createinstance!");
PostQuitMessage(0);
}
else{
_bstr_t pInfoName("ThunderExists");
_bstr_t pResultInfo=pAgent->GetInfo(pInfoName);
MessageBox(pResultInfo);
CoUninitialize();
}
}

}

错误提示
--------------------Configuration: kjkjkjk - Win32 Debug--------------------
Linking...
kjkjkjkDlg.obj : error LNK2001: unresolved external symbol _CLSID_Agent
kjkjkjkDlg.obj : error LNK2001: unresolved external symbol _IID_IAgent
Debug/kjkjkjk.exe : fatal error LNK1120: 2 unresolved externals
执行 link.exe 时出错.

kjkjkjk.exe - 1 error(s), 0 warning(s)

请教各位大虾错误发生在哪里?
另:我查了很多使用现成COM的例子,他们在CoCreateInstance函数中的REFCLSID和REFIID都是直接使用.而不使用DEFINE_GUID宏.对于ThunderAgent 1.0 Type Libary这个COM,这两个参数能不能直接找到?
...全文
98 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
CubieZhou 2008-03-16
  • 打赏
  • 举报
回复
只用添加#import "D:\\Program Files\\Thunder Network\\Thunder\\ComDlls\\ThunderAgent_Now.dll" no_namespace 就好了。
其他的等效方法可以参见:http://nu96.cn/show.asp?id=610
scq2099yt 2008-03-16
  • 打赏
  • 举报
回复
ding
  • 打赏
  • 举报
回复
去掉DEFINE_GUID这些相关的,让编译器自己通过导入类型库生成调用信息

3,245

社区成员

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

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