元旦闲来无事,学习一下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组件相关推荐

  1. Delphi代码编写标准指南

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! · 日月 ...

  2. 编写react组件_React组件的“黄金法则”如何帮助您编写更好的代码

    编写react组件 以及钩子如何发挥作用 (And how hooks come into play) Recently I've adopted a new philosophy that chan ...

  3. 用vue优雅地编写UI组件的几条指导原则

    前言 最近在尝试写几个UI组件,并通过阅读element-ui的源码,与其反复比较,然后认真思考,最后总结出一些自己的一些心得和体会.在造轮子的过程中,既巩固了html,css,js基础,又加深了对v ...

  4. Delphi XE10编写的《开放式公路收费系统》

    Delphi XE10编写的<开放式公路收费系统> ---------------------------------------- 适用于一级公路.机场公路.开放式收费公路 开发工具:D ...

  5. vue 如何生成一个dom元素_通过一个简单的示例学习如何编写Vue组件

    大家好,本篇文章我将带着大家一起学习如何编写自定义组件(Components),通过「vue基础」新手快速入门篇(一)这篇文章的学习,我们知道了 Vue 设计的目的就是为了方便我们创建基于组件UI的项 ...

  6. 编写react组件_s! 这就是为什么ReasonReact是编写React的最佳方法的原因

    编写react组件 Are you using React to build user interfaces? Well, I am too. And now, you'll learn why yo ...

  7. 编写react组件_如何编写第一个React.js组件

    编写react组件 React的函数和类组件,道具,状态和事件处理程序 (React's function and class components, props, state, and event ...

  8. iOS应用日志:开始编写日志组件与异常日志

    应用日志(一):开始编写日志组件 对于那些做后端开发的工程师来说,看 LOG解Bug应该是理所当然的事,但我接触到的移动应用开发的工程师里面,很多人并没有这个意识,查Bug时总是一遍一遍的试图重现,试 ...

  9. vanilla js_用Vanilla js编写前端组件

    vanilla js There's so much hype these days around front-end frameworks (React, Angular, Vue) that I ...

最新文章

  1. IT 巡检内容、工具、方法 amp; Linux / AIX / Oracle / VMware 巡检表模板 | 周末送资料...
  2. 中国市场新财富与新人群趋势
  3. python列表添加元组_python 列表与元组的操作简介
  4. Linux常用的配置文件
  5. openwrt系统的无线WiFi配置文件
  6. Android存储(1)-- 你还在乱用Android存储嘛!!!
  7. [CF1137E]Train Car Selection[维护凸壳]
  8. Tomcat 7 安装教程 + eclipse配置Tomcat
  9. 吾爱404错误页面圈小猫游戏代码
  10. 关闭445端口bat脚本
  11. Eclipse 工具上Springboot项目的简单 增删改查 的搭建
  12. 小心啦!水上有“天眼”,查你没商量!
  13. Android系列之Fragment(一)----Fragment加载到Activity当中
  14. win32 python查找文字指定格式 win32com 定位word开始结束 相当于发送快捷键
  15. ubuntu下定时自动备份数据库
  16. 华硕h110m主板怎么样_华硕台式机主板怎么样 华硕台式机主板多少钱【详细介绍】...
  17. 使用Python给自己的录课视频添加字幕
  18. Spring 接口方法异步调用
  19. shopify api php 开发,Shopify 脚本 API 参考
  20. 12升24V10A大电流升压同步整流方案

热门文章

  1. java 线程 函数_java – 从后台线程调用主线程上的函数
  2. 计算机四级的英文,计算机四级考试中英文术语对照
  3. c语言中for优化,c – 在For循环中发生了什么GCC优化?
  4. php5.4.41 绿色_编译安装PHP5.4.41
  5. python画同心圆程序_Python Turtle:使用circle()方法绘制同心圆
  6. php 两个数组 交集_两个数组的交集
  7. 文件服务器的文件设置只读,服务器设置文件为只读
  8. Java类名.方法和变量
  9. android计算距离顶部的距离,(lua版)计算距离的逻辑是从Android的提供的接口(Location.distanceBetween)中拔来的,应该是最精确的方法了...
  10. 使用 PyTorch 数据读取,JAX 框架来训练一个简单的神经网络