COM组件开发实践(四)---From C++ to COM :Part 1

一,C++客户重用C++对象

假设已经有一个可以重用的类,我们就可以在自己的程序中去重用它,只需要将其定义和实现文件加入到我们自己的工程中,并且在使用它的文件中包含此类的定义文件就可以了,这也是我们最常用的C++标准重用方法。就拿我自己来说,在CodeProject上遇到比较好的控件代码,都是这样直接用到自己的项目中来的。

下面就给出我这个系列的第一个代码示例,在接下来的几篇文章中,将基于此代码不断进行改进,一步步从C++走向COM.

简单介绍下我们要重用的C++对象,它是一个简单的类似数据库的对象,用来管理内存中的数据,它包含一个指向“数据库”中所有表的指针数组,表实际是一个字符串数组,每个数组元素表示表格的一行。另外这个类还包含有一个数据表表名的数组。

DBSRV.h文件:

typedef long HRESULT;//模拟COM中的HRESULT//内存数据库类class CDB{  // Interfaces  public:          // Interface for data access        HRESULT Read(short nTable, short nRow, LPTSTR lpszData);//读数据,nTable指定数据表,nRow指定数据行        HRESULT Write(short nTable, short nRow, LPCTSTR lpszData);//写数据,nTable指定数据表,nRow指定数据行        // Interface for database management        HRESULT Create(short &nTable, LPCTSTR lpszName);//创建数据表,表名为lpszName        HRESULT Delete(short nTable);//删除数据表        // Interface for database information        HRESULT GetNumTables(short &nNumTables);//获取数据表个数        HRESULT GetTableName(short nTable, LPTSTR lpszName);//获取指定数据表表名,nTable为数据表索引号        HRESULT GetNumRows(short nTable, short &nRows);//获取指定数据表的数据行数,nTable为数据表索引号,nRows保存返回的行数  // Implementation  private:      CPtrArray      m_arrTables;      //指向“数据库”中所有表的指针数组    CStringArray m_arrNames; //数据表名称数组    public:        ~CDB();};

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索c++
, 数组
, 数据
, hresult e_fail
, 数据表
, hresult
, short
hresult 0x80040154
前端组件化开发实践、vue组件化开发实践、组件化开发、android组件化开发、vuejs组件开发实例,以便于您获取更多的相关知识。

时间: 2024-12-09 23:33:02

COM组件开发实践(四)---From C++ to COM :Part 1的相关文章

COM组件开发实践(五)---From C++ to COM :Part 2

一,使用抽象基类重用C++对象 在上一篇文章<COM组件开发实践(四)---From C++ to COM :Part 1>中,我们已经将要复用的C++对象封装到DLL中了,对象的声明和实现已经实现了剥离,但还有问题:对象的私有成员(如我们示例中CDB类的数组变量m_arrTables)还是被客户看得一清二楚,即使客户没办法去访问它们:若对象改变了它的数据成员的大小,则所有的客户程序必须重新编译. 而实际上,客户需要的仅仅是对象的成员函数的地址,因此使用抽象基类可以很好地满足以上需求,客户就不

COM组件开发实践(八)---多线程ActiveX控件和自动调整ActiveX控件大小(下)

声明:本文代码基于CodeProject的文章<A Complete ActiveX Web Control Tutorial>修改而来,因此同样遵循Code Project Open License (CPOL). 在上一篇文章<COM组件开发实践(七)---多线程ActiveX控件和自动调整ActiveX控件大小(上)>中介绍了ActiveX控件中使用多线程的基本需求,并提出了一个简单的线程模型,但却出现了意想不到的问题,本文将尝试给出问题的一个可行的解法,并同时解决上文中提出

COM组件开发实践(六)---From C++ to COM :Part 3

在上一篇文章<COM组件开发实践(五)---From C++ to COM :Part 2 >中,我们进展到使用COM库加载C++对象了,这一篇中我们将真正将C++对象变成 COM对象,而在下一篇中我们将为它添加多接口支持. C++对象变成COM对象 要将一个C++对象变成一个真正的COM对象,只需要如下操作: 1)实现接口的引用计数.因此每个COM对象都需要有两个函数用于管理引用计数: ULONG AddRef(); ULONG Release(); 这两个函数不返回HRESULT,因为它们

COM组件开发实践(三)

前面两篇文章分别介绍了MFC ActiveX应用程序和使用ATL开发ActiveX的简单实例,但还有两个问题需要解决: 1)标记ActiveX控件为安全的控件 2)对控件进行数字签名.本文将结合这两点进行简单的介绍. Building a Safe ActiveX Control 如何不想办法将控件标记为安全的,就会在Web页面与控件进行交互时出现如下图的警告信息: 下面将分别介绍在MFC ActiveX和ATL中如何标记一个控件为安全的控件. 要标记一个MFC ActiveX控件为安全,可以仿

COM组件开发实践(一)

开发实践(一)-前端组件化开发实践"> Preface 因为项目需要,开始从事ActiveX方面的工作,看了一些资料,可惜都是些COM原理方面的,没有切合实际动手的东西,在CodeProject上读完David Marcionek的文章[1]后,收获良多,但也遇到一些恼人的小问题,因此在其基础上就一些易错点做些小注解.本文版权归David Marcionek所有. 简介 在本文中,我们将创建一个ActiveX控件,当加载控件时,它会显示一个动画进度条,以便向用户表明控件正在加载.此控件会包

COM组件开发实践(七)---多线程ActiveX控件和自动调整ActiveX控件大小(上)

声明:本文代码基于CodeProject的文章<A Complete ActiveX Web Control Tutorial>修改而来,因此同样遵循Code Project Open License (CPOL). 最近遇到两个需求:1)在ActiveX控件中使用工作线程来完成底层的硬件设备扫描任务,并在工作线程中根据操作结果回调外部web页面的JavaScript函数:2)能根据控件任务的不同自动调整控件大小.但在查阅了大量资料后,发现网上讨论ActiveX中多线程开发的文章基本没有,最后

COM组件开发实践(二)

假设需求如下:底层是一个数学运算库DLL,中间是ActiveX控件(它调用底层的数学运算库DLL来完成控制层),界面层在测试时可以是一个exe程序,最后发布到IE浏览器上测试. 数学运算库DLL的开发 新建一个Win32 DLL项目,加入一个头文件MyNum.h,在其中声明所有的数学函数(为简单起见,本文只考虑加法运算),代码如下: #ifndef MY_NUM_H #define MY_NUM_H int __stdcall AddNum(int,int); #endif 请注意这里的方法声明

ASP.NET自定义控件组件开发 第四章 组合控件开发CompositeControl 后篇

事件冒泡 我们上一篇已经开发一个登录的组合控件,但是我们把控件的事件的这个问题没有解决,现在我们就 来看看这个问题. 因为我们的组合控件Login是由一些已经存在的服务器控件的组合的,这样就省却了我们很多的麻烦, 上篇中我们已经把子控件的一些属性,如Text等,显示呈现为了组合控件的属性.我们将之称为"属性的 冒泡"(我自己这样认为的). 我们现在来想下:其实我们点击"提交"按钮,我们就想把控件中信息发送给服务器,然后验证.即 ,我们点击的是"提交&quo

ASP.NET自定义控件组件开发 第四章 组合控件开发CompositeControl

大家好,今天我们来实现一个自定义的控件,之前我们已经知道了,要开发自定义的控件一般继承三 个基类:Control,WebControl,还有一个就是今天要说的CompositeControl. 大家也许还记得,之前的开发的控件基本上都是我们自己从头到尾的写一些控件的标记,如 <table.....>之类的,而且还有一个大的问题:我们为了使得我们的控件更加的好用,专业,我们 还实现了大量的接口,和自己写很多的事件.这样开发控件的时间就加大了.其实我们可以利用ASP.NET中 已经有的控件,经过我