CoInitialize()和AfxOleInit() 都是初始化COM库,不同之处在与: OLE是建立在COM之上的技术,层次比COM要高.AfxOleInit()调用的是OleInitialize(),而 OleInitialize()除了调用CoInitializeEx()来初始化COM库外,还进行一些其它的操作,这些操作对OLE应用来说是必须的,这些OLE应用包括:      (1)Clipboard:      (2)Drag   and   drop:      (3)Object …
  Choosing the threading model for an object depends on the object's function. An object that does extensive I/O might support free-threading to provide maximum response to clients by allowing interface calls during I/O latency. On the other hand, an…
原文: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…
微软资料:invalidApartmentStateChange MDA 地址:https://docs.microsoft.com/zh-cn/dotnet/framework/debug-trace-profile/invalidapartmentstatechange-mda 文章:C# ApartmentState 枚举,指定线程单元状态   成员名称 说明   MTA Thread 将创建并进入一个多线程的单元.   STA Thread 将创建并进入一个单线程单元.   Unknow…
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…
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…
CoInitialize(LPVOID),它将以特定参数调用CoInitializeEx,为当前单元初始化COM库,并标记协同模式为单线程模式.参数必须为NULL.这是关于OLE和COM的问题. CoInitializeEx(LPVOID),新版本,可以用参数指定协同模式,如多线程模式,但注意单元的协同模式是不能改的,如果在已经初始化为多线程的单元里初始化OLE将失败并返回RPC_E_CHANGED_MODE.每个线程只要调用一次初始化就够了,同一线程中的后续调用也将通过,但会返回S_FALSE…
原文转自 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并非只…