在COM组件的使用和开发过程中经常需要获取有关组件的信息。而COM组件以二进制代码的形式发布,如果不借助特定的工具这些相关信息将难以被获取。通过访问类型库就可以查看COM组件的信息。

一、类型库的基础知识介绍:

1、类型库的定义:

类型库:在类型库中以二进制的形式描述了一个或多个对象的类型信息。具体的类型信息包括:组件的CLSID、所支持接口的IID、接口的成员函数及其参数和返回值类型等。

TTypedComObject类: TTypedComObject类及其派生类提供了对类型库的支持。COM由TTypedComObject派生,而不是TComObjectFactory.Create;初始时,delphi调用了TTypedComObjectFactory.create、而不是TComObjectFactory.Create;(Delphi自动创建XXXX_TLB.pas文件;)

2、查看类型库的信息

    在组件程序中,会专门创建一个类型库文件(tlb后缀名),此类型库文件定义和实现了组件向外所提供的接口、属性、方法和事件。Delphi专门为这个文件提供 了一个Pascal版本的文件(tlb扩展名),而且自动维护这两个文件的一致性。类型库的创建是根据.tlb文件中的描述进行编译的。Tlb文件包括Attributes、Uses、Flags、Text。Text文件下面给出一段文件描述:通过coclass关键字定义了对象类型信息,将据此建立相应的包装类。library关键字描述了当前库信息,并可通过importlib关键字引入其他的类型库。

[

uuid(B8DF2272-9F93-454E-9A95-60E32179C925),

version(1.0),

helpstring("ProjectDCOM Library")

]

library ProjectDCOM  // 描述了当前库信息,

{

importlib("stdole2.tlb"); // 引入其他的类型库

importlib("midas.dll");

importlib("stdvcl40.dll");

[

uuid(E30249CE-0CAB-4841-ADE4-83C5F26E52C7),

version(1.0),

helpstring("Dispatch interface for EnterAssist Object"),

dual,

oleautomation

]

interface IEnterAssist: IAppServer

{

};

[

uuid(19CEE64A-4F7E-4626-AD07-FDCB6260C96F),

version(1.0),

helpstring("EnterAssist Object")

]

coclass EnterAssist  // 定义了对象类型信息, EnterAssist自己定义的名称

{

[default] interface IEnterAssist;

};

};

3、使用类型库的好处:

1>、编写自动化控制时早期连接(Early Binding);

2>、可以根据类型库中的描述信息建立相应的包装类。通过此包装类将能很方便的在客户程序中使用组件对象提供的属性和方法。

3>、实用程序可以用来读取并显示有关包含类型库的COM服务器的信息,在COM客户和服务器之间自动参数调度;

4>、类型库对某些COM服务器是必须的,例如:自动化服务器和ActiveX控件;

二、类型库操作:

1、类型库中添加接口、属性、方法和事件

1>、第一种方法:打开实现文件,选择【Edit】菜单里的【Add To Interface】命令(注意:只有打开了实现文件,这个命令才能使用),Delphi将弹出增加接口对话框。在对话框里的Interface项选择Properties/Methods-IStringGridX,然后在Declaration里写入t属性的声明(如果你选中了对话框里的Syntax Helper选项,Delphi将随时提示你应该输入的内容); 点击OK后,这个属性的相关信息将自动加入到控件的实现文件、类型库文件和对应的Pascal文件中。因为控件的接口是双向的,所以在Pascal文件里使用了读和写两个方法来实现控件的属性。 
2>、第二种方法:使用类型库文件中的工具条:可以添加接口、方法、以及属性到COM服务器中; 
注意:工具条上可以通过点击鼠标右键弹出的菜单中选择Text Labels命令打开工具条的标题;

2、类型库文件中的工具栏: 
1>、Interface(接口): 自动为每一个新建的接口产生一个GUID; 
2>、Dispinterface(派遣接口): 与接口类似,但是使用不同的派遣机制调用服务器中的方法; 
3>、CoClass(): 类别的定义,被指定给实现接口的COM对象;使用COM对象之前必须先使用一种方法从类别定义建立真正的类别对象(变量); 再从类别对象取去需要的接口;最后再从取得的接口中调用需要执行的方法或需要存取的属性; 
4>、Enumeration(枚举): 与枚举类型类似;有整数ID来指明,而不是通过集合类型; 
5>、Constant(常量):只有在枚举下才有用;可以编辑Name、Value属性; 
6>、Alias(别名): 用于定义用户要包括一条记录类型(record)或联合类型(union)中的类型; 
7>、Record(记录类型): 记录结构; 
8>、Union(联合类型): 等同于Pascal Variant类型; 
9>、Module(模块): 模块是方法和常量的集合; 
10>、Method(方法): 输入参数(in)、输出参数(out)、可变参数(var); 
11>、Property(属性): 只读、只写、读写三种; 
12>、Refresh(更新): 使Delphi更新源文件; 
13>、Register(注册): 编译COM服务器并把服务器注册到Windows中; 
14>、Export(输出到IDL): 在MIDL或Corba格式中很有用;

3、类型库文件中的对象列表和页控件:

对象列表(Object List):显示服务器中定义的接口、方法等,点击会显示相应的情况,然后还可以添加以下东西; 
页控件(Page control):显示对象列表中当前选中的接点的类型信息。包括Attributes、Uses、Flags、Text; 
类型库也是一种资源; 
不必在客户应用程序中直接读取类型库;

http://www.vckbase.com/module/articleContent.php?id=4373

Delphi COM编程技术三类型库(库文件中的工具栏,很全)的更多相关文章

  1. DirectUI界面编程(三)从XML文件中加载界面

    Duilib支持xml界面布局,使得界面设计与逻辑处理相分离,本节介绍如何从xml文件中加载界面元素. 我们需要以下几个步骤: 创建并初始化CPaintManagerUI对象. 创建CDialogBu ...

  2. APUE(unix环境高级编程)第三版---first day---部署书中实例的运行环境(apue.h)

    操作环境:RHEL7.0 部署apue.h实例运行环境 1.下载头文件src.3e.tar.gz 2.解压 tar zxvf src.3e.tar.gz 3.创建普通用户(我仿照书上创建的sar用户) ...

  3. C++界面库(十几种,很全)

    刚开始用C++做界面的时候,根本不知道怎么用简陋的MFC控件做出比较美观的界面,后来就开始逐渐接触到BCG  Xtreme ToolkitPro v15.0.1,Skin++,等界面库,以及一些网友自 ...

  4. Java 并发编程(三)为线程安全类中加入新的原子操作

    Java 类库中包括很多实用的"基础模块"类.通常,我们应该优先选择重用这些现有的类而不是创建新的类.:重用能减少开发工作量.开发风险(由于现有类都已经通过測试)以及维护成本.有时 ...

  5. 接口自动化(三)--读取json文件中的数据

    上篇讲到实际的请求数据放置在json文件内,这一部分记述一下python读取json文件的实现. 代码如下(代码做了简化,根据需要调优:可做一些容错处理): 1 import json 2 3 cla ...

  6. .NET 线程池编程技术

    摘要 深度探索 Microsoft .NET提供的线程池, 揭示什么情况下你需要用线程池以及 .NET框架下的线程池是如何实现的,并告诉你如何去使用线程池. 内容 介绍 .NET中的线程池 线程池中执 ...

  7. C++primer第三章标准库类型

    除第二章介绍的基本数据类型外,C++ 还定义了一个内容丰富的抽象数据类型标准库. 本章将介绍标准库中的 vector.string 和 bitset 类型. string 类型支持长度可变的字符串 v ...

  8. c++ primer 第三章 标准库类型

    1. string 标准库 1.1初始化 string s1; 默认构造函数s1为空 string s2(s1); 将s2初始化为s1的一个副本 string s3("value" ...

  9. Caffe、TensorFlow、MXnet三个开源库对比

    库名称 开发语言 支持接口 安装难度(ubuntu) 文档风格 示例 支持模型 上手难易 Caffe c++/cuda c++/python/matlab *** * *** CNN ** MXNet ...

随机推荐

  1. Centos 配置ASP.Net Core 运行环境

    一:ASP.Net Core跨平台运行,需要在Linux安装运行环境.本机器使用的Centos,下载安装地址为:https://www.microsoft.com/net/core#centos su ...

  2. 下载PHPDroid: 基于WebView和PHP内置HTTP服务器开发Android应用

    基于Android上的PHP(比如我打包的PHPDroid),寥寥几行PHP代码,就能实现一个支持无线局域网用浏览器访问的Android手机的Shell,用于执行命令和PHP代码.       个人在 ...

  3. sqlmap新手注入

    一 什么是sqlmap sqlmap is an open source penetration testing tool that automates the process of detectin ...

  4. php 数据结构 hash表

    hash表 定义 hash表定义了一种将字符组成的字符串转换为固定长度(一般是更短长度)的数值或索引值的方法,称为散列法,也叫哈希法.由于通过更短的哈希值比用原始值进行数据库搜索更快,这种方法一般用来 ...

  5. MVC 创建带图片的<A></A>标签

    <a href="@Url.Action("Detail", "Product", new { messageId = item.message ...

  6. 【翻译】MVC Music Store 教程-概述(一)

    MVC Music Store教程介绍和说明了如何一步步的用ASP.NET MVC 和Visual Web Developer 进行Web开发,教程从最基础的阶段开始,所以对于初级阶段的开发者来说,也 ...

  7. VS2012中的全部预定义键盘快捷键列表

    原文 http://www.elanblog.com/2013/05/14/vs2012-key-list/#sectionToggle7 Visual Studio 集成开发环境 (IDE) 包括若 ...

  8. Logstash 默认不处理一天前的文件

    The default behavior of the file input plugin is to ignore files whose last modification is greater ...

  9. Developer‘s提升开发效率的工具和插件或编程语言

    1.Git 之前也有过不少版本控制的工具.有好的,也有糟糕的.不过它们都或多或少地误入歧途了. 这时候Git出现了.一旦你用上了这个神奇的工具,很难相像你还会碰到比它更好的了. 还没用过Git?试一下 ...

  10. VC维的物理意义

    vc约等于可调节参数的个数 来自为知笔记(Wiz)