我在主线程APP的InitInstance函数中初始化组件库
HRESULT hr = CoInitialize(NULL);
if (FAILED(hr))
{
return FALSE;
}
在随后的操作中创建子线程用于操作数据库
CWinThread *pThread = NULL;
pThread = AfxBeginThread(
OperateDatabase,
(LPVOID) this,
THREAD_PRIORITY_NORMAL,
0,
CREATE_SUSPENDED,
NULL);
if (pThread != NULL)
{
ResetEvent(g_hStopEvent);
pThread->ResumeThread();
}
在子线程中,我创建ADO的_ConnectionPtr连接对象
ado27::_ConnectionPtr pCnct = NULL;
hr = pCnct.CreateInstance(__uuidof(ado27::Connection));
if (FAILED(hr))
{
LPVOID lpMsgBuf;
FormatMessage(
FORMAT_MESSAGE_FROM_SYSTEM
| FORMAT_MESSAGE_ALLOCATE_BUFFER,
NULL,
(DWORD) hr,
0,
(LPTSTR) &lpMsgBuf,
0,
NULL); MessageBox(
NULL,
(LPTSTR) lpMsgBuf,
"数据库连接错误",
MB_OK | MB_ICONERROR); LocalFree(lpMsgBuf); }但是CreateInstance总是报错: 0x0013e350 "标记没有引用存储"。
如果我在子线程中初始化组件库的话,CreateInstance将会正确执行,但是这个线程会被多次调用,在这里初始化组件库效率会太低,不知道有没有别的好方法。
HRESULT hr = CoInitialize(NULL);
if (FAILED(hr))
{
return FALSE;
}
在随后的操作中创建子线程用于操作数据库
CWinThread *pThread = NULL;
pThread = AfxBeginThread(
OperateDatabase,
(LPVOID) this,
THREAD_PRIORITY_NORMAL,
0,
CREATE_SUSPENDED,
NULL);
if (pThread != NULL)
{
ResetEvent(g_hStopEvent);
pThread->ResumeThread();
}
在子线程中,我创建ADO的_ConnectionPtr连接对象
ado27::_ConnectionPtr pCnct = NULL;
hr = pCnct.CreateInstance(__uuidof(ado27::Connection));
if (FAILED(hr))
{
LPVOID lpMsgBuf;
FormatMessage(
FORMAT_MESSAGE_FROM_SYSTEM
| FORMAT_MESSAGE_ALLOCATE_BUFFER,
NULL,
(DWORD) hr,
0,
(LPTSTR) &lpMsgBuf,
0,
NULL); MessageBox(
NULL,
(LPTSTR) lpMsgBuf,
"数据库连接错误",
MB_OK | MB_ICONERROR); LocalFree(lpMsgBuf); }但是CreateInstance总是报错: 0x0013e350 "标记没有引用存储"。
如果我在子线程中初始化组件库的话,CreateInstance将会正确执行,但是这个线程会被多次调用,在这里初始化组件库效率会太低,不知道有没有别的好方法。
解决方案 »
- 改变按钮颜色的问题,不是简单改变按钮背景色
- 字符串是一个数学表达式,怎么才能知道他的值
- 写串口时出现ERROR_IO_PENDING的问题求解
- 创建DLL连接库
- 初始化ListControl控件遇到的困惑
- 紧急求教:我用VC做的一个单文档工程或者是MDI,怎么样在程序一运行得到这个主运行界面的句柄?在线等待
- 批量更新数据库时,为何PutCollect总是报错,
- 在资源里加入可执行文件(或者多个自定义资源,合并成一个可执行文件),然后在把它一个一个释放...
- 已经创建了一个类CStringArray3,怎么创建该类的对象并且这个对象要全局调用?
- 请教VC中使用MATCOM问题,谢谢!
- 请问如何在vc下调用dxf文件并显示呢?
- 左手和右手坐标系中的转化问题!!!!!!
#import "C:\Program Files\Common Files\System\ADO\msado15.dll" rename_namespace("ado27") rename("EOF", "adoEOF")
#pragma warning(default: 4146)
_RecordsetPtr pRst("ADODB.Recordset");
pConn->Open(m_sAdoConnString, "", "", adConnectUnspecified); // adAsyncConnect
我在线程里这样用是没问题的,你可以试试
我用你说的方法试了一遍,可是出现一奇怪的问题。第一次调试的时候没有问题,
但是在随后的调试中,却出现同样的错误("标记没有引用存储"),这是怎么一回事?
--
这是我的连接串// stdafx.h
#import "c:\Program Files\Common Files\System\ADO\msado15.dll" no_namespace rename("EOF", "EndOfFile")
com 环境。
结束用 ::CoUninitialize();
参见http://expert.csdn.net/Expert/FAQ/FAQ_Index.asp?id=84