为什么我的hr=CoInitialize(NULL)总是返回S_FALSE
我只不过在对话框上加了个datagrid的activex控件,其他什么也没做,而我用hr=CoInitialize(NULL)时总是返回S_FALSE,搞得我非常郁闷!
那位兄弟姐妹知道,给我一点帮助
问题点数:20、回复次数:10Top
1 楼EnochShen(小疯子:真的好菜—知耻而后勇!)回复于 2004-12-04 11:22:30 得分 0
The COM library is already initialized on this apartmentTop
2 楼jifeng1123(几风)回复于 2004-12-04 11:54:15 得分 0
怎么解决啊!Top
3 楼bobob(静思)回复于 2004-12-04 12:24:29 得分 5
如果你确信还没有初始化过com,那你就用GetLastError看看是什么错误Top
4 楼Semigod()回复于 2004-12-04 13:14:46 得分 5
同意楼上,用GetLastError得到错误码,然后用VC的ErrorLookup看一下是什么意思就好解决了Top
5 楼jifeng1123(几风)回复于 2004-12-04 13:57:30 得分 0
LPVOID lpMsgBuf;
FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
NULL,
::GetLastError(),
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
(LPTSTR) &lpMsgBuf,
0,
NULL
);
MessageBox((LPCTSTR)lpMsgBuf,"Error",MB_ICONWARNING);
我用了getlasterror后,竟然返回的是:“操作成功执行”!
大家帮我看一下我的代码有没有写错Top
6 楼hushuangyan74()回复于 2004-12-05 09:11:49 得分 0
使用datagrid的activex控件,就不要用hr=CoInitialize(NULL),就可以使用ActiveX控件。
如果是使用一般的COM组件,就要在InitInstance()中加::CoInitialize(NULL),在ExitInstance()中加::CoUninitialize()。你试试!
Top
7 楼IloveAzhu(AJUN)回复于 2004-12-05 09:35:07 得分 5
你的COM组件估计已经被那个ActiveX控件调用,不需要你再调用了。
还有这个错误,是无法用GetLastError()监测到的,只是由返回值确定。
以下是MSDN的解释:
Return Values
This function supports the standard return values E_INVALIDARG, E_OUTOFMEMORY, and E_UNEXPECTED, as well as the following:
S_OK
The COM library was initialized successfully on this thread.
/****************
S_FALSE
The COM library is already initialized on this thread.
****************/
RPC_E_CHANGED_MODE
A previous call to CoInitializeEx specified the concurrency model for this thread as multithread apartment (MTA). If running Windows 2000, this could also mean that a change from neutral-threaded apartment to single-threaded apartment occurred.
Top
8 楼jifeng1123(几风)回复于 2004-12-05 10:25:27 得分 0
to :hushuangyan74()你的方法好像不起作用!
我写一下我环境:
我现在调试的程序是客户端,它主要的功能是通过datagrid来显示我从dcom服务器上返回的一个recordset。所以我要用到下面的一些代码:
hr= ::CoInitialize(NULL);
if(FAILED(hr))
{
MessageBox("coinitialize failed!","waring",MB_ICONWARNING);
return FALSE;
}
hr=CoInitializeSecurity(NULL,1,NULL,NULL,RPC_C_AUTHN_LEVEL_DEFAULT,RPC_C_IMP_LEVEL_IDENTIFY,NULL,0,NULL);
if (FAILED(hr))
{
MessageBox("coinitializesecurity failed!","waring",MB_ICONWARNING);
return FALSE;
}
COSERVERINFO ServerInfo={0,L"FILESERVER",NULL,0};
MULTI_QI MultiQi={&IID_IUnknown,NULL,NOERROR};
hr=CoCreateInstanceEx(CLSID_Search,NULL,CLSCTX_REMOTE_SERVER,&ServerInfo,1,&MultiQi);
if(FAILED(hr))
{
MessageBox("CoCreateInstanceEx failed!","waring",MB_ICONWARNING);
return FALSE;
}
pUnknown=(IUnknown*)MultiQi.pItf;
hr=pUnknown->QueryInterface(IID_ISearch,(void**)&psearch);
if (FAILED(hr))
{
MessageBox("QueryInterface failed!","waring",MB_ICONWARNING);
return FALSE;
}
pUnknown->Release();
_RecordsetPtr sptr(__uuidof(Recordset));
CString m_sql;
m_sql="select * from Customers";
psearch->SelectRecord(m_sql.AllocSysString(),(IUnknown**)&sptr);
如果不加datagrid我的程序能编译,也能运行。
但是加了datagrid后,我的程序在CoInitialize(NULL);返回1,继续运行在CoInitializeSecurity的地方出现0x80010119 在整理或打乱界面时必须初始化安全机制,一旦初始化,不能再做修改。
我起初以为是dcom配置问题,仔细查找后,加了datagrid才出现!我不知道是什么原因,恳求大家帮帮忙,我郁闷死了!
Top
9 楼newkey007(无限天空 www.xDrv.com)回复于 2004-12-05 11:39:37 得分 5
初始化ole tryTop
10 楼jifeng1123(几风)回复于 2004-12-05 12:19:42 得分 0
我试过初始化,ole也不行Top
相关问题
- 需要调用几次::CoInitialize(NULL)?
- AfxOleInit();和::CoInitialize(NULL);用来初始化ADO环境有何区别?
- this==NULL???
- .用CoInitialize(NULL)初始化com库,和使用AfxOleInit()初始化com库有什么不一样??
- to :nononono(null,null)
- nononono(null,null)!!!!
- javax.ejb.NoSuchObjectLocalException: null; CausedByException is:null
- a==null 和 a is null
- Test(NULL)
- Update NULL




