随笔分类 -  COM

COM在注册表中的相关键值及其意义
摘要:转自https://www.cnblogs.com/developersupport/archive/2013/06/02/COM-registry.html 概要 当编写好一个COM并将其在系统中注册之后,这些注册表项到底位于Register中的什么位置,系统是如何通过这些注册表项在Runtime 阅读全文
posted @ 2021-11-18 11:59 归海一刀
Inside COM读书笔记-----类厂
摘要:1.CoCreateInstance 通过传人参数CLSID创建相应组件的一个实例,并返回此组件实例的某个接口。 CoCreateInstance的声明 HRESULT__stdcallCoCreateInstance(__in REFCLSID rclsid,__in_opt LPUNKNO... 阅读全文
posted @ 2015-01-07 10:57 归海一刀
宏使用之 Macro Pitfalls
摘要:转载自:https://developer.apple.com/legacy/library/documentation/DeveloperTools/gcc-4.0.1/cpp/Macro-Pitfalls.html#Macro-Pitfalls3.10 Macro PitfallsIn this... 阅读全文
posted @ 2014-09-05 09:11 归海一刀 阅读(167) 评论(0) 推荐(0)
图解如何用VS2008调试DLL程序
摘要:今天在VS2008中写DLL程序时,DLL中的函数出现了问题,想调试一下,以便知道原因,因我从来没有调试过DLL程序,因此从网上找了下调试DLL程序的方法,记录如下:第一步:在VS2008 的“解决方案资源管理器”中右键选择 DLL 项目的属性,截图如下:第二步:打开DLL属性窗口后,修改以下属性值即可://修改 要启动的调试器 的值1. 要启动的调试器:本地Windows 调试器//填写命令的值为rundll32.exe2. 命令:rundll32.exe//填写命令参数3. 命令参数:$(TargetFileName)SetHook //SetHook为我的DLL中的函数的名字, ... 阅读全文
posted @ 2013-05-17 15:52 归海一刀
COM接口在不同线程中的传递技巧两则
摘要:在多线程程序中使用COM对象真是件令人头疼的事情。当你能够访问一个接口指针的时候,并不意味着你可以调用接口上的方法。我从来没真正搞懂过所谓COM的几种线程模式。问题是,当我试图在一个线程里调用一个COM接口的方法,而这个COM接口是在另一个线程中创建时,从来没有成功过。更糟的是,连错误提示都没有。 用全局接口表实现COM接口在不同线程中的传递 在多个线程中传递接口需要额外的工作,各种书籍上都介绍了所谓Marshal一个接口方法,不过我从来没有使用过。因为有更简单的方法,就是用全局接口表(GlobalInterfaceTable)。 GlobalInterfaceTable允许你在任何地方... 阅读全文
posted @ 2013-05-09 17:34 归海一刀
Rich Edit 控件 SDK 参考手册
摘要:摘要: 本文对Rich Edit控件底层消息机制进行了讲解,以期读者对Windows平台下的Rich Edit控件有一个更深入的认识,同时对于使用Win32 SDK进行开发的人员具有一定参考价值。因为文章的初衷是引领VB程序员通过Win32 API调用来扩展VB下的Rich Edit控件的功能,所以对于每个消息的详细说明和注意事项未作过多说明,感兴趣的朋友可以参考Visual Studio下的MSDN Library。关键字:Rich Edit Control、RTF、SDK、MSDN。一、引言Rich Edit控件是一个可用于输入、编辑、格式化、打印和保存文本的窗体。这些文本可以设置字符和段 阅读全文
posted @ 2013-04-03 09:53 归海一刀
vc中调用Com组件的方法详解
摘要:引用自:http://www.cnblogs.com/jcss2008/archive/2009/10/30/1592907.html1.创建myCom.dll,该COM只有一个组件,两个接口IGetRes--方法Hello(), IGetResEx--方法HelloEx()2.在工程中导入组件或类型库 #import "组件所在目录myCom.dll" no_namespace 或 #import "类型库所在目录myCom.tlb" using namespace MYCOM; --Method 1-------------------------- 阅读全文
posted @ 2013-04-02 14:55 归海一刀
BSTR与其它字符串类型转换
摘要:引用自:http://liulinqi206.blog.163.com/blog/static/1346047662012431101242694/1类型转换常用字符串件的类型转换。FromToSample字符串常量BSTRRight:BSTR bs = ::SysAllocString(_T("Test string"));…::SysFreeString();Wrong:BSTR bs = _T("Test string"); //ERRORLPWSTR /LPCWSTR /WCHAR* /wchar_tBSTRRight:LPCTSTR sz1 = 阅读全文
posted @ 2013-04-02 14:37 归海一刀
IDL详解
摘要:Question:什么是IDL和MIDL?Answer:IDL是接口定义语言。MIDL是Microsoft的IDL编译器。在用IDL对接口和组件进行了描述后,可以用MIDL进行编译,生成相应的代理和存根DLL的C代码。一个例子:import “unknown.idl” ///用于将其他IDL文件中的定义包含到当前文件中///Interface IX[ ///注意是[ ]不是 {}object, ///所定义的接口是一个COM接口uuid(32bb8323-b41b-11cf-a6bb-0080c7b2d682), ///相应的接口IIDhelpstring(“IX Interface”), / 阅读全文
posted @ 2013-03-29 10:54 归海一刀
智能指针CComPtr 和 CComQIPtr
摘要:1 简介:ATL 提供了2个智能指针的模板包装类,CComPtr<> 和 CComQIPtr<>,这两个类都在 <atlbase.h> 中声明。CComQIPtr<> 包含了 CComPtr<>的所有功能,因此我们可以完全用 CComQIPtr<> 来使用智能接口指针,唯一要说明的一点就是:CComQIPtr<> 由于使用了运算符的重载功能,它会自动帮我们调用QueryInterface()函数,因此CComQIPtr<> 唯一的缺点就是不能定义 IUnknown * 指针。 // 智能指针 sma 阅读全文
posted @ 2013-03-29 10:12 归海一刀
无注册表的COM调用
摘要:对于COM,一般用CoCreateInstance来创建对象,这就要求COM的dll要用regsvr32注册,因为CoCreateInstance是要读注册表信息完成相应操作的。CoCreateInstance主要的工作是读注册表,然后CoLoadLibrary,调用DllGetClassObject,最后CreateInstance创建对象。如果我们自己来实现CoCreateInstance的工作,就可以实现无注册表的COM调用。假设有个简单COM,接口很简单,就是个减法函数。普通COM的代码是这样的://普通COMvoid TestCom1(){cout<<"Test 阅读全文
posted @ 2013-03-14 14:06 归海一刀
IUnknown接口QueryInterface函数介绍
摘要:一、COM组件的目标:COM组件的一个主要优势是:便于升级。要实现这个优势需要满足一下两个条件:1、运行时从客户程序动态加载和卸载,采用DLL技术可以实现。2、为了更好的突出DLL的优势,还需要信息隐藏,即封装性。二、COM组件的信息隐藏采用IUnknown接口来实现: 1、IUnknown接口功能简介:IUnknown意思是未知,即未知的接口。采用这个名字是为了简单起见,所有的COM接口都需要继承IUnknown,因此若某个客户拥有一个IUnknown接口的指针,也就不知道接口到底是什么类型的,只需要知道此接口可以用来查询其他接口。IUnknown接口有一个用来查询接口的函数QueryInt 阅读全文
posted @ 2013-03-11 15:55 归海一刀 阅读(1896) 评论(0) 推荐(0)
巧妙的Section — — 剖析ATL OBJECT_MAP的自动建立
摘要:【基本知识】1、#pragma section,建立一个section。下例中,ATL是section名,_a是section中的的段名,段默认大小为104H,另外默认段内数据初始化为0。意即一个section可以包含多个名字不同的段。不懂section的请查阅PE文件结构。2、合并两个Section3、allocate将指定的变量放在指定的section中的指定的段中。4、VC编译器属性,假设定义了同一section的三个段,ATL$_a、ATL$_b、ATL$_c,则这三个段在section内会按名称顺序依次排列。【ATL OBJ_MAP 的建立】根据【基本知识】,很容易分析出,上文定义了 阅读全文
posted @ 2013-03-11 11:44 归海一刀 阅读(313) 评论(0) 推荐(0)
ATL ----CComPtr使用
摘要:COM接口指针很危险,因为使用过程中需要每一个使用者都要严格并且正确的AddRef和Release,一旦出现问题,就会造成对象不能被正常释放,或者对象被重复删除,造成程序崩溃。所以使用COM接口,必须小心翼翼才行。但是,即使所有的代码中,都正确的AddRef和Release,也不一定能保证万无一失,例如:void SomeApp( IHello * pHello ){IHello* pCopy = pHello;pCopy->AddRef(); OtherApp();pCopy->Hello();pCopy->Release();}看起来好像无懈可击,但是假设OtherApp 阅读全文
posted @ 2012-09-11 22:29 归海一刀 阅读(652) 评论(0) 推荐(0)