DELPHI怎样编写COM组件

         元旦闲来无事,学习一下DELPHI怎样编写COM组件.结果一试才发现问题多多,要么是找不到接口,要么是找不到方法.查了很多资料,发现说的都不清楚.现在把我所学到的和大家分享一下,希望新学的人能少走弯路.

         1、什么是COM

         COM是微软定的一种组件编写的规范,目的是为了实现组件的重用,不管你是用C、DELPHI、VB什么语言写的,只要遵守这种规范就是COM组件,就能相互之间调用。那这个规范是什么呢,最简单的,就是按规定使用接口,微软定了个IUnkown接口,只要实现了这个接口的类,就可以称为COM组件。在此基础上可以加上自己的接口,实现特定的功能,这就成了有用的COM组件了。

         2、DELPHI中如何创建COM组件

         两个步骤:

         (1)创建一个ActiveX Library,这是个DLL

         (2)创建一个COM Object或者Automation Object,二者选其一,这两者都是COM组件,但是当然还是有区别的,差在调用的方法上,这个后面再说

         3、DELPHI中如何调用COM组件

         两种方法,分别是用接口来调和用名称来调,第一种适用于支持接口的语言,如C、DELPHI,VB就不行了,好处是速度快,因为不用根据名称去查找了,还有开发时编译器能检查,缺点是要导入类型库。第二种适用于所有的语言,好处是不用导入类型了,缺点是调用的速度慢,还有开发时编译器不检查。

          前面说的COM Object只能通过第一种方法调,Automation Object两种方法都可以调。举例如下:

           我创建了一个ActiveX Library,名叫mylib。一个Automation Object,名叫myobj。并且编译注册过了。

         用第一种方法调用时,需要如下操作:在use里加上mylib_TLB类型库(如果不是自己开发的没有TLB可以从DLL导入生成的),代码是var myobj:Imyobj;myobj=Comyobj.create();之后就可以用了。如果有兴趣可以看看类型库的代码里,Comyobj.create里调用了CreateComObject,这函数返回的是IUnkown接口,再用as操作转成你需要的Imyobj接口。

         用第二种方法不需要类型库了,代码是var myobj:variant;myobj=CreateOleObject('mylib.myobj');之后就可以用了,这个方便吧。其实为了实现用名字调用,需要加上IDispatch接口,不过delphi都自动给我们加好了,不用管直接用就行。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/548987.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

centos7利用nexus离线搭建局域网pypi源

centos7利用nexus离线搭建局域网pypi源 1、官网下载nexus oss版本 https://sonatype-download.global.ssl.fastly.net/repository/downloads-prod-group/3/nexus-3.29.2-02-unix.tar.gz [rootlocalhost bin]# wget https://sonatype-download.global.ssl.fastly.net/reposit…

c++链表的操作

#include <iostream>using namespace std;class Item{public:friend class List;private:Item(int d0){datad;next0;}Item *next;int data;};class List{private:Item *list;Item *endl();public:List(){list NULL;}List(int d){listnew Item(d);}int print();//输出int …

从零搭建nginx服务器

本文开始从零搭建一个nginx网页服务器。 1.最小化安装linux&#xff08;web服务器需要纯净的环境&#xff09; 2.局域网环境&#xff08;环境限制&#xff0c;需要搭建本地包配置环境&#xff09; 3.配置安装nginx环境 1.搭建系统 物理系统:两台浪潮服务器&#xff0c;两台联…

解决wordpress无法离线发布(远程发布)的故障

使用wordpress mu3.0与3.1时&#xff0c;不知道什么原因&#xff0c;只要开户了WORDPRESS的MU选项&#xff0c;Zoundry Raven和Windows Live Writer就无法注册账户成功(之前在Zoundry Raven里建好的账号还能收发&#xff0c;但不能新建)。在Zoundry Raven上表现为&#xff1a;输…

vim最常用快捷键

Vim最常用快捷键 拷贝当前行 yy , 拷贝当前行向下的 5 行 5yy&#xff0c;并粘贴&#xff08;p&#xff09;。 删除当前行 dd , 删除当前行向下的 5 行 5dd 在文件中查找某个单词 [命令行下 /关键字 &#xff0c; 回车 查找 , 输入 n 就是查找下一个 ],查询 hello. 设置文件…

.NET中栈和堆的比较【转自:c#开发园地】

本文转自&#xff1a;C#开发园地 原文翻译的地址&#xff1a;http://www.cnblogs.com/c2303191/articles/1065675.html压栈(入栈)执行方法中的指令.NET中栈和堆的比较1 原文出处&#xff1a; http://www.c-sharpcorner.com/UploadFile/rmcochran/csharp_memory01122006130034PM…

修改远程桌面的端口+防火墙设置

作者&#xff1a;WYF 修改远程桌面的端口防火墙设置&#xff08;最详细&#xff09; Windows系统中的远程终端服务是一项功能非常强大的服务&#xff0c;其默认的端口号3389很容易成为入侵者长驻主机的通道&#xff0c;使用户电脑成为通常称为的“肉鸡”&#xff0c;受入侵者远…

ppp和chap的区别

PAP和CHAP协议是目前的在PPP(MODEM或ADSL拨号)中普遍使用的认证协议&#xff0c;CHAP在RFC1994中定义&#xff0c;是一种挑战响应式协议&#xff0c;双方共享的口令信息不用在通信中传输&#xff1b;PAP在RFC1334中定义&#xff0c;是一种简单的明文用户名/口令认证方式。 2. P…

keepalived高可用+nginx负载均衡

keepalived高可用nginx负载均衡 1、IP地址规划 hostnameip说明KN0110.4.7.30keepalived MASTER节点 nginx负载均衡器KN0210.4.7.31keepalived BACKUP节点 nginx负载均衡器WEB0110.4.7.24web01节点WEB0210.4.7.25web02节点 2、关闭防火墙&#xff0c;selinux&#xff0c;并安装…

从几个版本的memcpy的测速过程学习一点底层的东西

以下有三个版本的memcpy&#xff0c;对于版本3&#xff0c;很多人都很熟悉&#xff0c;它很经典&#xff0c;很多人面试都写这个&#xff0c;可是我不得不说一句&#xff0c;对于类似的问题&#xff0c;最好的回答有两个&#xff1a;一是调用c库&#xff0c;二是使用汇编。用这…

nohup xxx 后台进程关闭,可以这样避免

nohup xxx &后台进程关闭&#xff0c;可以这样避免 1、nohup 是 no hang up 的缩写&#xff0c;就是不挂断的意思&#xff0c;但没有后台运行&#xff0c;终端不能标准输入。 加一个nohup命令在最前面&#xff0c;表示不挂断的运行命令 加一个&命令的最后面&#xf…

静态生成html的原理

虽然在性能上讲&#xff0c;即使将JSP或ACTION转换成HTML文件还是不如将某张JSP或某个ACTION缓存起来再作应响这种策略。但是&#xff0c;对大型的系统&#xff0c;JSP页面和ACTION可能成千上万&#xff0c;页每张JSP或每个ACTION反回的数据大概有几K左右。当然&#xff0c;我们…

centos利用nexus搭建局域网docker私有仓库

centos利用nexus搭建局域网docker私有仓库 1、官网下载nexus oss版本 https://sonatype-download.global.ssl.fastly.net/repository/downloads-prod-group/3/nexus-3.29.2-02-unix.tar.gz [rootlocalhost bin]# wget https://sonatype-download.global.ssl.fastly.net/repo…

整合apache和JBoss,配置虚拟主机

大致步骤&#xff1a;一、安装apache 二、安装JDK&#xff0c;作为JBOSS的运行环境三、安装JBOSS四、安装及配置mod_jk&#xff0c;用以apache和JBOSS之间的通信五、配置虚拟主机&#xff0c;把动态资源交给JBOSS处理安装apache&#xff1a;1、 安装&#xff1a;yum2、 配置&am…

Max retries exceeded with URL报错小记

from hyp mistake: 循环post请求第二遍报错 Max retries exceeded with URL for i in fac:url******payload ********req requests.request("POST", url, datapayload, headersheaders, timeout3)*******网上查询的方法 1、增加重试连接次数&#xff1a; reque…

History变量

History有三个变量如下&#xff1a; HISTFILE 变量&#xff0c;申请文件路经 [rootskyxue ~]# echo $HISTFILE /root/.bash_history HISTSIZE、 HISTFILESIZE变量设置记录个数转载于:https://blog.51cto.com/skyson/537938

centos离线部署gitlab

centos离线部署gitlab 有的时候因为工作环境需要&#xff0c;不能够连接互联网。而我们工作时又需要使用git进行合作开发&#xff0c;这时就需要在内网部署一个git服务端。 1、下载依赖软件包 yum install --downloadonly --downloaddir/opt/repo curl policycoreutils-pyth…

centos离线安装jenkins

centos离线安装jenkins 1、安装java环境&#xff0c;这里我们选择openjdk&#xff0c;当然也可以是JDK [rootlocalhost repo]# yum install -y java2、下载jenkins的yum源的配置文件jenkins.repo [rootlocalhost repo]# wget -O /etc/yum.repos.d/jenkins.repo http://pkg.j…

django开发环境搭建

django开发环境搭建 1、下载所需要的安装包 pycharm python3.7.9 2、安装pycharm python环境 3、Windows 安装mkvirtualenv虚拟python环境 pip install virtualenvwrapper-win4、下载必要的安装包&#xff08;只下载不安装&#xff09; pip download -d \home\packs virtu…

Revit二次开发 - C#程序员的佳好选择

虽然Revit的使用者和开发目前在中国都很少&#xff0c;但是这是个趋势。未来Revit会在许多方面取代Autocad做CAD二次开发的&#xff0c;在中国也很吃香。但是使用C难倒了许多人。而Revit二次开发可以使用C#并且上手非常容易。假如你是一个C#程序员&#xff0c;正在确定自己未来…