求教:为什么找不到CoCreateInstanceEx定义?

zcj4046 2003-12-19 03:24:15
我在使用CoCreateInstanceEx函数创建DCOM对象时,虽然我已经#include "Objbase.h",但总是提示此函数没有声明。
烦恼啊!
...全文
71 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
zcj4046 2003-12-24
  • 打赏
  • 举报
回复
问题终于解决了,非常感谢大家。谢谢!
lop5712 2003-12-23
  • 打赏
  • 举报
回复
楼主的C运行时期库用成了单线程的,在Project/settings里的C/C++标签页里改成多线程版的C运行时期库即可
zcj4046 2003-12-23
  • 打赏
  • 举报
回复
我把宏定义
#define _WIN32_WINNT 0x0400
放在
#include "..\name\name.h"
前,提示以下错误,
Linking...
nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __endthreadex
nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __beginthreadex
Debug/Newclient.exe : fatal error LNK1120: 2 unresolved externals
Error executing link.exe.
Creating browse info file...

Newclient.exe - 3 error(s), 0 warning(s)

请再帮助一下。先行谢过。
lop5712 2003-12-22
  • 打赏
  • 举报
回复
可参考
http://expert.csdn.net/Expert/topic/2541/2541670.xml?temp=.5777094
ltqin 2003-12-22
  • 打赏
  • 举报
回复
你看一下CoCreateInstanceEx被的定义的地方,只有在_WIN32_WINNT >= 0x0400 时才被包含进来,所以应在#include "Objbase.h" 前定义
#define _WIN32_WINNT 0x0400

#define _WIN32_WINNT 0x0500
之类的东东。

easyrock 2003-12-22
  • 打赏
  • 举报
回复
好像要_WIN32_WINNT >= 0x0500
zcj4046 2003-12-22
  • 打赏
  • 举报
回复
谢谢老兄,我已经试了:加载库文件 "strmiids.lib "和"Quartz.lib "可仍然不好使,
还是找不到CoCreateInstanceEx函数,请问,还有没有其他办法。
lop5712 2003-12-22
  • 打赏
  • 举报
回复
楼主的宏放错地方了,应放在#include "..\name\name.h"之前
zcj4046 2003-12-22
  • 打赏
  • 举报
回复
多谢各位高手相助,你们说的方法我都试过了,可还是不行,我把代码贴出来(代码不长),麻烦大家再帮助看一下。

//程序代码:
#include "stdafx.h"
#include <afx.h>

#include "..\name\name.h"
#include "..\name\name_i.c"

#include <comdef.h>
#include <iostream.h>
#include <comutil.h>
#define _WIN32_WINNT 0x0401
#define _WIN32_DCOM
#include <objbase.h>

int main(int argc, char* argv[])
{
CoInitialize(NULL);
try
{
HRESULT hr;
COSERVERINFO cs;
memset(&cs, 0, sizeof(cs));
CString aa("zhangcj");
cs.pwszName = (BSTR)(_bstr_t)aa;
MULTI_QI qi[1];
memset(qi, 0, sizeof(qi));
qi[0].pIID = &IID_IMachine;
hr = CoCreateInstanceEx(CLSID_Machine, NULL, CLSCTX_SERVER, &cs, 1, qi);
}
catch(_com_error e)
{
}
return 0;
}
//提示错误:
E:\新建文件夹\Newclient\Newclient.cpp(30) : error C2065: 'CoCreateInstanceEx' : undeclared identifier

我发现CoCreateInstanceEx在objbase.h中的定义是这样的:

#if (_WIN32_WINNT >= 0x0400 ) || defined(_WIN32_DCOM) // DCOM
...
WINOLEAPI CoCreateInstanceEx(
REFCLSID Clsid,
IUnknown * punkOuter, // only relevant locally
DWORD dwClsCtx,
COSERVERINFO * pServerInfo,
DWORD dwCount,
MULTI_QI * pResults );
#endif // DCOM

所以,我定义了宏:#define _WIN32_WINNT 0x0401 和 #define _WIN32_DCOM

但不知为什么,还是不行。真是郁闷,看来学习COM真是不容易呀,恳请大家出手相助呀。
csgo 2003-12-19
  • 打赏
  • 举报
回复
#pragma comment(lib,"strmiids.lib");
#pragma comment(lib,"Quartz.lib");
加载库文件试试

3,245

社区成员

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

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