相关推荐
-
COM的Apartment概念
首先,COM的Apartment概念是为了让COM的开发和使用都容易才引入Apartment概念的。但是关于Apartment概念详细阐述的比较好的资料在国内可能比较少,所以有很多人对其理解上存在一些疑问。这很正常,我当初为理解它也花了2周时间,参考了不少资料。 其次,marshal的问题。marshal主要是COM用来在进程间以及计算机间进行COM调用时用的,即Proxy/stub模型。但是在进
-
COM组件-JS调用测试-源代码
测试环境:XP COMTest代码是采用C#代码编写的一个方法,注册系统后通过js可以在网页上进行调用实现跨平台调用。 其中TestCom是C#调用测试COM组件方法; 注册脚本: echo "-------------start RegMyLib----------------------------" net stop mpssvc gacutil /u COMTest.dll regasm /u COMTest.dll /tlb:COMTest.tlb regasm /codebase COMTest.dll regasm COMTest.dll /tlb:COMTest.tlb regasm2 COMTest.dll gacutil /I COMTest.dll net start mpssvc pause echo "-------------end RegMyLib----------------------------" 这是一个整套的用于测试的代码,研究了好久,很辛苦!
-
关于COM及套间(Apartment)知识
什么是COM组件? COM组件是以WIN32动态链接库(DLL)或可执行文件(EXE)形式发布的可执行代码组成。 COM组件是遵循COM规范编写的 COM组件是一些小的二进制可执行文件 COM组件可以给应用程序、操作系统以及其他组件提供服务 自定义的COM组件可以在运行时刻同其他组件连接起来构成某个应用程序 COM组件可以动态的插入或卸出应用 COM组件必须是动态链接的
-
COM之套间的理解
对于从事com组件开发的工程师来说,寓所的概念是比较难理解的,微软对这方面的解释又很少,我将在以后的时间里,对寓所的概念给出解释。 一、com库初始化过程调用堆栈CoInitializeEx(NULL, COINIT_APARTMENTTHREADED)堆栈> user32.dll!_CreateWindowExW@48() + 0x1c 字节 ole32.dll!InitMai
-
COM的线程模型
COM,ThreadingModel
-
使用JS/VBS来测试你的COM组件
最近又看了一遍去年的这个时候所买的COM类的书籍,对COM有了更深一层的认识。记得去年的这个时候还只知道接口和对象,只知道类型标识符和接口ID,只知道...^.^ 前些日子公司让我做一个控件,因为功能很简单,所以没几天就完成了。这个控件是用来在IE中使用的,所以我就把它做成了COM组件。客户在使用我的控件的时候,他们使用JavaScript来调用其中的函数,为了能
-
关于注册表组件线程设置
技术总监问我,在注册表关于组件多线程设置,在服务器找到已注册dll发现ThreadingModel键值,真不知什么意思,以下文章我看了真不懂,反正发现值是free,是支持多线程,以下备忘留用。 转自http://blog.sina.com.cn/s/blog_56dee71a0100ngrv.html -------------------------------------
-
多线程调用COM组件,使用CoInitializeEx()
#define _WIN32_DCOM #define _WIN32_WINNT 0x0600 在staafx.h最前面加入如上代码
-
多线程调用COM组件的体会(CoInitialize)
调用任何COM组件之前,你必须首先初始化COM套件环境,即调用CoInitialize或CoInitializeEx。COM套件环境在线程的生存周期内有效,线程退出前需要调用CoUninitialize释放COM套件。 所谓COM套件,实际上是微软为了方便大家理解而起的一个名字,不过个人认为改名词很难理解。COM套件只指COM组件运行时的环境,其中包括COM组件的数据、变量、线程调度方式。...
-
COM线程模型详解
http://blog.chinaunix.net/uid-24862988-id-3799415.html 线程模型是一种数学模型,专门针对多线程编程而提供的算法,但也仅是算法,不是实现。本文讲解COM提出的各个类型的线程模型,再说明COM运行时期库是如何实现它们的,就像说明Windows是如何实现线程这个数学模型的一样,最后指明一下跨套间调用和各种
-
CoInitializeEx 与CoInitialize的区别
CoInitialize、CoInitializeEx都是windows的API,主要是告诉windows以什么方式为程序创建COM对象,原因是程序调用com库函数(除CoGetMalloc和内存分配函数)之前必须初始化com库。 有哪些方式呢?单线程和多线程。 CoInitialize指明以单线程方式创建。 CoInitializeEx可以指定C
-
组件的多线程特性
1. 组件的多线程特性::在设计COM组件的时候,需要考虑它在多线程环境中运行的情况。因为组件客户可能在多个线程中调用这个COM对象提供的功能。Win32平台,具有两种线程,一种为UI线程,UI线程拥有自己的消息循环,可以包含窗口,通过消息循环向窗口分发消息。另一种为辅助线程,也称工作(者)线程,没有消息循环,不能处理消息,一般用作后台处理。COM中与UI对象的是套间线程(apar
-
VS2010创建ATL工程及使用C++测试COM组件
VS2010创建ATL工程及使用C++测试COM组件 1.创建ATL项目,取名MyCom 2. ATL 项目向导,勾选 【支持COM+ 1.0】和【支持部件注册器】,其他默认,点击完成。 3.在该项目中添加类 4.添加一个ATL简单对象 5. ATL 简单对象向导,“简称”中输入类名称MyClass,其他输入框会自动填写,最下面的“ProgID”没有自动填写,最好自己写上一个,如MyCom...
-
COM组件的初始化
任何一个使用COM组件的windows程序在初始化COM库的时候都要调用CoInitializeEx函数,每一个使用COM接口的线程必须单独调用这个函数。
-
ATL源码学习---线程模型支持
1.线程锁的类型 线程锁类型有CComCriticalSection,CComAutoCriticalSection、CComSafeDeleteCriticalSection、CComAutoDeleteCriticalSection、CComFakeCriticalSection。每种锁都有它们的特定用途。// COM Sync Classesclass CCom
-
COM如何区分套间线程(apartment thread)和自由线程(free thread)
转载于:https://www.cnblogs.com/time-is-life/p/5718438.html
-
com中的线程模式(转)
com中的线程模式(转) 提及COM的线程模式,实际上指的是两个方面,一个是客户程序的线程模式,一个是组件所支持的线程模式。客户程序的线程模式只有两种,单线程公寓(STA)和多线程公寓(MTA)。组件所支持的线程模式有四种:Single(单线程)、Apartment(STA)、Free(MTA)、Both(STA+MTA)。 1、公寓只是个逻辑上的概念。一个STA只能包含一个线程,一