• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >vc/mfc > ADO遇到的对象线程模型问题

ADO遇到的对象线程模型问题

作者:佚名 字体:[增加 减小] 来源:互联网 时间:2017-06-04

佚名通过本文主要向大家介绍了ado 多线程,ado对象模型,dao ado对象模型,ado.net对象模型,ado对象模型主要有等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: ADO遇到的对象线程模型问题
描述:

在我的CADOTestDlg对话框应用中,我启动其中的一个成员函数void Fun() 作为工作线程。Fun() 中需要创建 _RecordsetPtr _rsPtr 对象,发现如下情形:
I。无关主线程 OnInitDialog()是否调用 ::CoInitialize(NULL),如果在 Fun() 中自己调用
   ::CoInitialize(NULL), rsPtr.CreateInstance() 能够创建成功
II。OnInitDialog() 中调用 
   ::CoInitialize(NULL); 
   cnPtr.CreateInstance(__uuidof(Connection));
  不做cnPtr->Open()操作,而在 Fun() 不做 ::CoInitialize(NULL);调用,发现
rsPtr.CreateInstance(__uuidof(Recordset)); 调用失败,rsPtr不能创建,返回错误码:
  -2147221008 (800401F0)    CoInitialize has not been called.  
III。同II,只增加OnInitDialog()中调用 cnPtr->Open() 操作,Fun() 中的rsPtr.CreateInstance()  能够创建成功
不能理解的就是III,为什么主线程中一个cnPtr->Open()操作,其它工作线程中的CoCreateInstance()便能够成功。cnPtr->Open()对于其他线程的COM对象线程模型有什么样子的影响?
// CADOTestDlg 类的成员
_ConnectionPtr  cnPtr;
void CADOTestDlg::Fun()
{
// ::CoInitialize(NULL);
       
         _RecordsetPtr _rsPtr ;
HRESULT rs = rsPtr.CreateInstance(__uuidof(Recordset));
if (FAILED(rs))
{
MessageBox("rsPtr.CreateInstance fail...");
}
//       ::CoUninitialize();
}
BOOL CADOTestDlg::OnInitDialog()
{
CDialog::OnInitDialog();
std::string strConnectString = "Provider=MSDASQL.1;Driver=Microsoft Visual Foxpro Driver;SourceDB=";
strConnectString += "D:\\Data";
strConnectString += ";SourceType=DBF;";
::CoInitialize(NULL);
HRESULT rs = cnPtr.CreateInstance(__uuidof(Connection));
if (FAILED(rs))
{
MessageBox("cnPtr CreateInstance fail...");
}
//       cnPtr->Open(strConnectString.c_str(),_bstr_t(""), _bstr_t(""), NULL);
}


解决方案1:

汗。。。的确像III所说的,只要一Open,新建线程都不用CoInitialize了


分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 如何在线程里进行ADO的线程安全的初始化呢?
  • 为何我的多线程不能通过编译呢
  • 我想在多个线程里通过ADO操作数据库。可是。。。
  • 多线程与ADO,急急急!
  • 请教ADO在线程中建立连接的问题
  • 线程中使用Ado对数据库进行update和insert操作的问题急
  • 用ADO在线程中打不开数据库,请帮忙
  • 怎样把编译连接环境由单线程改为多线程?
  • ADO多线程问题。高手们谁做过呀?帮帮我呀!
  • 在多线程中用ADO操作的问题,请高手帮忙?

相关文章

  • 2017-06-05 关于CButton:GetButtonStyle的问题
  • 2017-06-04 如何用atl访问dataset
  • 2017-06-05 vc中mfc的链接库可以选择静态链接,附加的链接库怎么选择静态呀?
  • 2017-06-04 问个bho跳转的问题
  • 2017-06-04 如果添加一工具栏在窗体中高结贴率解决马上结贴
  • 2017-06-05 基于MFC的activex控件如何开发视频插件
  • 2017-06-04 如何在CDataGrid中插入其他控件
  • 2017-06-05 问题很简单,答案却很难
  • 2017-06-05 关于调用_stdcall约定导出函数的dll
  • 2017-06-04 请问再ASP中如何调用用VC写的activexdll

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 这两个方法的效果为什么会不同??
    • 关于dll的菜鸟问题---望斑竹和高手多多帮助
    • C++类中的静态函数有什么行为特征?
    • 请教调用一个DLL中函数遇到的错误提示
    • 如何向IE注入一个新线程
    • 怎样用定时器向串口连续发送命令?
    • 我如何检测到用户打开/关闭了一个进程???
    • 全局钩子问题
    • 请问在多处理器上创建线程能否指定CPU?
    • 问线程的用户方式和内核方式??

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有