CoInitialize和CoInitializeEx】的更多相关文章

CoInitialize()和AfxOleInit() 都是初始化COM库,不同之处在与: OLE是建立在COM之上的技术,层次比COM要高.AfxOleInit()调用的是OleInitialize(),而 OleInitialize()除了调用CoInitializeEx()来初始化COM库外,还进行一些其它的操作,这些操作对OLE应用来说是必须的,这些OLE应用包括:      (1)Clipboard:      (2)Drag   and   drop:      (3)Object …
1.CoInitialize和CoInitializeEx的功能 CoInitialize是在当前线程初始化Com组件的函数,并且初始化为STA模式(单线程模式),一般新的程序建议使用CoInitializeEx来替代.CoInitializeEx初始化当前线程Com组件并提供更多的设置选项,如并发模式等. 2.关于并发模型的说明(concurrency model) 并发模型类型 下面两种不能同时设置 COINIT_APARTMENTTHREADED 这个模式允许多线程调用,但是多线程所有的调…
在项目中为了用API访问Wmi Object来实现命令wmic的功能,所以得使用COM库,使用COM库之前得初始化一些东西. m_hr = CoInitializeEx(, COINIT_APARTMENTTHREADED); if (FAILED(m_hr)) { std::ostringstream errorStream; errorStream << "Failed to initialize COM library. Error code = 0x" <&l…
大家都知道程序中若要使用COM组件则必须要先调用CoInitialize,该函数主要是用来初始化COM运行环境.但这个函数的作用域是以线程为单位还是以进程为单位呢?也许大家已经通过测试程序摸索出答案,没错,是以线程为单位.今天我们就稍微再深入一下,通过分析CoInitialize的具体实现来印证我们的想法. 我们先来看看CoInitialize的汇编 769B2A24                 mov     edi, edi 769B2A26                 push  …
From: http://blog.csdn.net/zhoubl668/archive/2009/04/30/4139933.aspx OLE是建立在COM之上的技术,层次比COM要高.AfxOleInit()调用的是OleInitialize(),而OleInitialize()除了调用CoInitializeEx()来初始化COM库外,还进行一些其它的操作,这些操作对OLE应用来说是必须的,这些OLE应用包括:     (1)Clipboard:     (2)Drag   and   d…
原文转自 https://www.cnblogs.com/manors/archive/2010/05/17/COM_Initialize_STA_MTA.html 与设备打交道时,我们经常用到COM组件,比如音视频设备(麦克风.播放器.摄像头等). 调用任何COM组件之前,你必须首先初始化COM套件环境,即调用CoInitialize或CoInitializeEx.COM套件环境在线程的生存周期内有效,线程退出前需要调用CoUninitialize释放COM套件. 所谓COM套件,实际上是微软…
调用任何COM组件之前,你必须首先初始化COM套件环境,即调用CoInitialize或CoInitializeEx.COM套件环境在线程的生存周期内有效,线程退出前需要调用CoUninitialize释放COM套件. 所谓COM套件,实际上是微软为了方便大家理解而起的一个名字,不过个人认为改名词很难理解.COM套件只指COM组件运行时的环境,其中包括COM组件的数据.变量.线程调度方式. COM套件分为两种模式,单线程套件(STA)和多线程套件(MTA).不要单从字面上理解,例如:STA并非只…

ADO

目 录 第1章 基础    1 1.1 引入ADO库文件    1 1.1.1 版本    1 1.2 初始化OLE/COM库环境    2 1.3 comdef.h    2 1.3.1 字符串编码转换    2 1.3.2 重要的类    3 1.3.3 重要的变量    4 1.3.4 智能指针    4 第2章 _ConnectionPtr    5 2.1 连接数据库    5 2.2 执行SQL语句    5 2.3 事务处理    6 2.4 断开连接    7 第3章 _Reco…
释放接口对象,既不是调用MyObj.Free,也不是MyObj.Release;破坏对象的正确方法是将它们设置为nil:MyInterface := nil; 一个接口不能离开实现它的对象而独立存活.这个接口仅仅是一个抽象,它仅仅是一个想法.接口具有即插即用的功能,它建立了供应商必须遵守的规范. 接口可以仅仅在一层深度上运行,比较简单.不像OOP,一层套一层,一旦改了中间层,即容易引起更下层的错误.在本质上,接口并不鼓励创建深分层结构,而鼓励相对简单的具有较好的性能特征的程序. GUID是128…
  2009-11-10 0:28 此文章:自己编写 转载于<汤姆&杰瑞> DirectShow 1 -- 下载与VC配置 1 DirectX SDK9 Directshow sdk 下载网址 : http://download.microsoft.com/download/d/9/1/d91c44b9-fbac-4e8e-bee1-4a75777923ec/dxsdk_feb2005_extras.exe 在执行DirectShow样例时必须先用设置Visual C++编辑环境,要不…
使用IDropTarget接口同时支持文本和文件拖放 关于Windows的外壳扩展编程,拖放是比较简单的一种,在网上可以找到不少介绍这个技巧的文章.大部分是介绍使用MFC的COleDropTarget实现的, 我觉得一般使用COleDropTarget已经很好了,但是我习惯在一些程序模块中,完全的不使用MFC,比如纯SDK编程,还有用在ATL的时候,MFC是相当累 赘的.所以COleDropTarget在这个意义上讲不够完美. IDropTarget是系统留给支持拖放的客户程序的一个纯虚接口,事…
原文:https://msdn.microsoft.com/library/ms809971.aspx Behavior of the COM Threading Models COM线程模型的行为 Before any thread can create or manipulate COM objects, it must perform some preliminary initialization to establish its relationship with the COM lib…
原文:http://blog.csdn.net/byxdaz/article/details/6595210 一.Com概念 所谓COM(Componet Object Model,组件对象模型),是一种说明如何建立可动态互变组件的规范,此规范提供了为保证能够互操作,客户和组件应遵循的一些二进制和网络标准.通过这种标准将可以在任意两个组件之间进行通信而不用考虑其所处的操作环境是否相同.使用的开发语言是否一致以及是否运行于同一台计算机. 在COM规范下将能够以高度灵活的编程手段来开发.维护应用程序…
一.Com概念 所谓COM(Componet Object Model,组件对象模型),是一种说明如何建立可动态互变组件的规范,此规范提供了为保证能够互操作,客户和组件应遵循的一些二进制和网络标准.通过这种标准将可以在任意两个组件之间进行通信而不用考虑其所处的操作环境是否相同.使用的开发语言是否一致以及是否运行于同一台计算机. 在COM规范下将能够以高度灵活的编程手段来开发.维护应用程序.可以将一个单独的复杂程序划分为多个独立的模块进行开发,这里的每一个独立模块都是一个自给自足的组件,可以采取不…
  2009-11-10 0:28 此文章:自己编写 转载于<汤姆&杰瑞> DirectShow 1 -- 下载与VC配置 1 DirectX SDK9 Directshow sdk 下载网址 : http://download.microsoft.com/download/d/9/1/d91c44b9-fbac-4e8e-bee1-4a75777923ec/dxsdk_feb2005_extras.exe 在执行DirectShow样例时必须先用设置Visual C++编辑环境,要不…
在python中,定义一个方法,直接调用可以,但是创建一个线程来调用就可能导致失败.这种现象多出现在使用com对象进行系统操作时,而且是以线程的形式调用. 异常提示如下:syntax error.WMI returned a syntax error: you're probably running inside a thread without first calling pythoncom.CoInitialize[Ex] (no underlying exception) 仔细观察的话,异…
本文准备总结一些 Direct Show 常用的API接口函数,方便以后查询回忆.如果这里没有你想了解的函数,你可以自行搜索MSDN + 函数名去 MSDN 查找你想要了解的函数,也可以查看百度百科相关. (持续更新中) CoInitialize 在当前线程上初始化 COM 库. Syntax HRESULT CoInitialize(LPVOID pvReserved); Parameters pvReserved:此参数是保留参数,必须为 NULL. 返回值 返回一个 HRESULT 值.可…
微软资料:invalidApartmentStateChange MDA 地址:https://docs.microsoft.com/zh-cn/dotnet/framework/debug-trace-profile/invalidapartmentstatechange-mda 文章:C# ApartmentState 枚举,指定线程单元状态   成员名称 说明   MTA Thread 将创建并进入一个多线程的单元.   STA Thread 将创建并进入一个单线程单元.   Unknow…
本文纯为本人记录,有网上诸多参考,请勿转发! 记录可能可能有点啰嗦,自己划重点吧!! (无论是生活还是工作,如果很困惑,千万不要消极一定要勇敢积极的面对它,不用说太多懂得人自然懂,一定要解决这个疑惑就多读书吧! 书是你最好的交流对象 ---2019-04-15) 参考: 1.c/c++ int _tmain(int argc, _TCHAR* argv[]) : https://blog.csdn.net/exceptional_czr/article/details/38786707 2.Co…
最近工作比较忙,在粗略分析了CoInitialize之后我们一直没有再深入研究,下面言归正传.前面我们初步了解到了CoInitialize其实是通过调用CoInitializeEx来实现功能的,而后者最终调用了wCoInitializeEx函数,如果能进一步了解这个函数的内部实现,那么我们对COM环境的初始化过程就比较清晰了.好,我们下面继续看wCoInitializeEx的汇编代码,这次我们分段来看. 769AF092 arg_0           = dword ptr  8769AF09…
CoInitialize(LPVOID),它将以特定参数调用CoInitializeEx,为当前单元初始化COM库,并标记协同模式为单线程模式.参数必须为NULL.这是关于OLE和COM的问题. CoInitializeEx(LPVOID),新版本,可以用参数指定协同模式,如多线程模式,但注意单元的协同模式是不能改的,如果在已经初始化为多线程的单元里初始化OLE将失败并返回RPC_E_CHANGED_MODE.每个线程只要调用一次初始化就够了,同一线程中的后续调用也将通过,但会返回S_FALSE…
1.uses ActiveX; 2. procedure HLCJ.Execute;begin    CoInitialize(nil);    //要使用的控件    CoUninitialize;end;…
在Delphi  多线程中出现“尚未调用CoInitialize错误”的解决方法 解决方法如下: function  TMyThread.ExecTimer: Boolean;begin  Result := False ;  FMyThreadExecfinish := False;  Screen.Cursor := crHourGlass;  CoInitialize(nil); // 一定要加上此行代码  try    TranspondClientBaseData_factory1(H…
一般解决方法是在线程开始启用 CoInitialize(nil),线程结束调用 CoUninitialize .如果你使用多种数据库连接,比如三层中经常切换到MSSQL和Oracle,我们只需在判断 TUniConnection 的连接前事件 OnBeforeConnect 写下如下代码: procedure TServDBFunc.ServConnBeforeConnect(Sender: TObject); begin if (ServConn <> nil) and SameText(S…
1. 由于使用ado等引起的异常. 2. 若是子线程或某方法操作ado可在该方法开头和结尾分别加上: function myfun begin CoInitialize(nil); // your code; CoUninitialize; end; 3. 在主方法加入该句子有时候不能解决问题,因为默认是初始化主线程的,只有在子线程或方法加入才行.…
关于多线程中创建使用TADOConnect.TADODataSet等Com组件时,必须先初始化Com 在多线程启用执行前 CoInitialize(nil); 在多线程启用执行后 CoUninitialize;…
本人封装了一个类,里面需要用到ADO连接数据库, 所以需要初始化COM环境以及释放COM环境, 我打算在构造函数里面执行CoInitialize,在析构函数里面执行CoUninitialize 但是程序运行时,在析构函数中调用CoUninitialize,程序崩溃了~ CoUninitialize()引起系统异常推出 Closes the COM library on the current thread, unloads all DLLs loaded by the thread, frees…
ADO线程不安全,UniDAC 在使用MSSQL也是如此.其实这是微软COM问题,不怪Devart公司. 一般解决方法是在线程开始启用 CoInitialize(nil),线程结束调用 CoUninitialize .如果你使用多种数据库连接,比如三层中经常切换到MSSQL和Oracle,我们只需在判断 TUniConnection 的连接前事件 OnBeforeConnect 写下如下代码: procedure TServDBFunc.ServConnBeforeConnect(Sender:…
原帖地址 http://bbs.csdn.net/topics/390481350 解决办法 procedure DisplayVideoInfo; var wmi, objs, obj : OleVariant; enum           : IEnumVariant; value          : Cardinal; begin try CoInitialize(nil);//  加上这两句 wmi := CreateOleObject('WbemScripting.SWbemLoc…
错误: error C2065: CoInitializeEx' : undeclared identifier 解决方法 原因: 本来程序的编译选项选择的是:使用标准windows库,当改为在静态库中使用MFC后就出现了上面的错误 解决方法 代码中添加依赖库 #pragma comment (lib,"Ole32.lib")…