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都自动给我们加好了,不用管直接用就行。
DELPHI怎样编写COM组件相关推荐
- Delphi代码编写标准指南
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! · 日月 ...
- 编写react组件_React组件的“黄金法则”如何帮助您编写更好的代码
编写react组件 以及钩子如何发挥作用 (And how hooks come into play) Recently I've adopted a new philosophy that chan ...
- 用vue优雅地编写UI组件的几条指导原则
前言 最近在尝试写几个UI组件,并通过阅读element-ui的源码,与其反复比较,然后认真思考,最后总结出一些自己的一些心得和体会.在造轮子的过程中,既巩固了html,css,js基础,又加深了对v ...
- Delphi XE10编写的《开放式公路收费系统》
Delphi XE10编写的<开放式公路收费系统> ---------------------------------------- 适用于一级公路.机场公路.开放式收费公路 开发工具:D ...
- vue 如何生成一个dom元素_通过一个简单的示例学习如何编写Vue组件
大家好,本篇文章我将带着大家一起学习如何编写自定义组件(Components),通过「vue基础」新手快速入门篇(一)这篇文章的学习,我们知道了 Vue 设计的目的就是为了方便我们创建基于组件UI的项 ...
- 编写react组件_s! 这就是为什么ReasonReact是编写React的最佳方法的原因
编写react组件 Are you using React to build user interfaces? Well, I am too. And now, you'll learn why yo ...
- 编写react组件_如何编写第一个React.js组件
编写react组件 React的函数和类组件,道具,状态和事件处理程序 (React's function and class components, props, state, and event ...
- iOS应用日志:开始编写日志组件与异常日志
应用日志(一):开始编写日志组件 对于那些做后端开发的工程师来说,看 LOG解Bug应该是理所当然的事,但我接触到的移动应用开发的工程师里面,很多人并没有这个意识,查Bug时总是一遍一遍的试图重现,试 ...
- vanilla js_用Vanilla js编写前端组件
vanilla js There's so much hype these days around front-end frameworks (React, Angular, Vue) that I ...
最新文章
- IT 巡检内容、工具、方法 amp; Linux / AIX / Oracle / VMware 巡检表模板 | 周末送资料...
- 中国市场新财富与新人群趋势
- python列表添加元组_python 列表与元组的操作简介
- Linux常用的配置文件
- openwrt系统的无线WiFi配置文件
- Android存储(1)-- 你还在乱用Android存储嘛!!!
- [CF1137E]Train Car Selection[维护凸壳]
- Tomcat 7 安装教程 + eclipse配置Tomcat
- 吾爱404错误页面圈小猫游戏代码
- 关闭445端口bat脚本
- Eclipse 工具上Springboot项目的简单 增删改查 的搭建
- 小心啦!水上有“天眼”,查你没商量!
- Android系列之Fragment(一)----Fragment加载到Activity当中
- win32 python查找文字指定格式 win32com 定位word开始结束 相当于发送快捷键
- ubuntu下定时自动备份数据库
- 华硕h110m主板怎么样_华硕台式机主板怎么样 华硕台式机主板多少钱【详细介绍】...
- 使用Python给自己的录课视频添加字幕
- Spring 接口方法异步调用
- shopify api php 开发,Shopify 脚本 API 参考
- 12升24V10A大电流升压同步整流方案
热门文章
- java 线程 函数_java – 从后台线程调用主线程上的函数
- 计算机四级的英文,计算机四级考试中英文术语对照
- c语言中for优化,c – 在For循环中发生了什么GCC优化?
- php5.4.41 绿色_编译安装PHP5.4.41
- python画同心圆程序_Python Turtle:使用circle()方法绘制同心圆
- php 两个数组 交集_两个数组的交集
- 文件服务器的文件设置只读,服务器设置文件为只读
- Java类名.方法和变量
- android计算距离顶部的距离,(lua版)计算距离的逻辑是从Android的提供的接口(Location.distanceBetween)中拔来的,应该是最精确的方法了...
- 使用 PyTorch 数据读取,JAX 框架来训练一个简单的神经网络