IBM Books

发行说明

IBM TXSeries
发行说明

版本 4.2

GI10-5100-00

5697-D17 5697-D18 5697-D19 5697-D20 5697-D21 5697-D22 1997 年 8 月 12 日

第一版(1998 年 2 月)

本版本适用于:

IBM TXSeries AIX 版,版本 4.2,程序号 5697-D17
IBM TXSeries Solaris 版,版本 4.2,程序号 5697-D18
IBM TXSeries Windows NT 版(Gradient DCE),版本 4.2,程序号 5697-D20
IBM TXSeries Windows NT 版(IBM DCE),版本 4.2,程序号 5697-D21
IBM TXSeries HP-UX 版,版本 4.2,程序号 5697-D22

以及所有的后续版本、发行版和修订本,除非在新版本中另有特别说明。 请参考可用的系统书目的最新版本,获得 这些产品的当前信息。

软拷贝版本基于了本书的 印刷版本。 为了使此信息更适合于软拷贝,某些格式已作了一些修正。

可以通过 IBM 或 Transarc 代理或通过当地的 IBM 分部 来订购出版物。

在本出版物的背后有一张 "读者意见表"。 如果您要提出意见, 而这里描述的方式又不适用于您的话, 请将它们寄往以下地址:

Transarc Corporation, The Gulf Tower,
707 Grant Street, Pittsburgh, PA 15219, USA.

当您向 IBM 或 Transarc 发送了信息后,就授予了它们 非专有权,它们可以以任何认为适当的方法使用或散发这些信息, 而不必对您负任何 责任。

© Copyright International Business Machines Corporation 1993, 1998; Transarc Corporation, 1998. All rights reserved.
Note to U.S. government Users -- Documentation related ...


目录表



前言

第 1 章 TXSeries 4.2 产品

  • TXSeries 4.2 媒体/手册包的内容
  • TXSeries 文档集
  • 公共 TXSeries 文档
  • CICS 文档
  • CICS 系列文档
  • Encina 管理性文档
  • Encina 程序设计文档
  • 第 2 章 CICS:新功能

    第 3 章 Encina:新功能

  • Encina 管理:新功能
  • Encina 程序设计:新功能
  • Encina 监视器
  • Encina SFS
  • Encina 工具箱
  • Encina++
  • Encina 文档:新功能
  • 第 4 章 TXSeries 4.2 中修正的缺陷

  • Encina Enconsole
  • Encina 控制程序(enccp)
  • Encina 监视器
  • Encina PPC
  • Encina RQS
  • Encina SFS
  • Encina 执行体
  • Encina 服务器核心
  • Encina++/OTS
  • Encina 实用程序
  • 遵循 XA 的资源管理器
  • 第 5 章 TXSeries 4.2 中已知的缺陷和限制

  • 分布式计算环境(DCE)
  • Encina Enconsole
  • Encina 控制程序(enccp)
  • Encina 监视器
  • Encina PPC
  • Encina RQS
  • Encina SFS
  • Encina 执行体
  • Encina 服务器核心
  • Encina++
  • CICS
  • 遵循 XA 的资源管理器
  • 文档
  • 有关使用 Enconsole 的附加信息
  • 第 6 章 遵循 XA 的资源管理器

  • 在 Encina 环境中使用遵循 XA 的资源管理器
  • 在 Encina 环境中使用 DB2
  • Microsoft SQL 服务器和 Encina 一起在 Windows NT 上使用
  • 第 7 章 有关 Encina Windows NT 版的附加信息

  • 与 Encina 一起使用 Microsoft Visual C++
  • 建立 Encina 监视器应用程序服务器
  • 建立 Encina 监视器客户机
  • 在 Encina 下使用 Microsoft Visual Basic
  • 在 Visual Basic 中运行 Encina 客户机应用程序
  • 注意数据类型
  • 支持 Encina 函数
  • 代码示例
  • 将应用程序从 Encina Windows 版移植到 Encina Windows NT 版
  • 索引


    1. SQL 服务器应用程序的编译器任选项
    2. 调用 dbenlistxatrans 函数的示例
    3. 在示例客户机源文件中的头信息
    4. 示例 TACF 文件
    5. 示例 TIDL 文件
    6. 初始化 Encina 客户机并且对出错校验
    7. 启动事务
    8. 滚回事务
    9. 生成远程过程调用
    10. 在 Visual Basic 中将字符串用做 OUT 参数

    1. 注册资源管理器中使用的信息
    2. 等价于 TIDL、C 和 Visual Basic 数据类型(标量)
    3. 等价于 TIDL、C 和 Visual Basic 数据类型(数组和字符串)
    4. 等价于 TIDL、C 和 Visual Basic 数据类型(结构、枚举类型和常数)
    5. Encina Windows(3.1)版和 Encina Windows NT/95 版等价的函数

    前言


    第 1 章 TXSeries 4.2 产品

    本章提供了有关 TXSeries 4.2 的常规信息。该信息对管理员和程序员都很有用。

    请注意 TXSeries 4.2 的当前有限可用性发行版是仅英文版本。 常规可用性发行版, 预期在 1998 年上半年推出,将提供其它所支持的语言版本。


    TXSeries 4.2 媒体/手册包的内容

    TXSeries 4.2 媒体/手册包含有下列项目:


    TXSeries 文档集

    IBM TXSeries 文档集包含用户信息控制系统(CICS) 和 Encina 产品的完整文档。 下列章节提供了 TXSeries 文档集的高级说明。 如需得到关于文档集的更详细信息, 请参阅 概念与功能 文档或对应平台的 快速入门 文档。

    如果是一个现存的 CICS 或 Encina 用户, 必须注意这个版本的产品文档中的诸多更改。 取决于是使用 CICS 还是 Encina 以及使用产品的平台,更改的范围是不同的。 下列部分还提供了对文档的一些重要更改信息。

    除非另外注明,否则所有文档都有下列格式:

    如需得到更多关于访问 TXSeries 文档的信息, 请参阅对应平台的快速入门 文档。

    Encina 用户请注意,Encina 参考文档没有以 AIX、 Solaris 和 HP-UX 操作系统上的 UNIX manpage 形式提供。 不能安装供 UNIX man 命令 的 Encina 参考文档。

    注意:与 IBM TXSeries 产品包一起包括的其它产品(例如, IBM MQSeries 和 Lotus Domino Go Webserver)的文档由那些产品提供。 这些发行说明仅描述了特定于 CICS 和 Encina 的文档。 关于任何其它与 TXSeries 一起提供的产品的更详细信息,请查看其印刷 文档和文档 CD-ROM。

    公共 TXSeries 文档

    公共 TXSeries 文档包括同时提供有关 CICS 和 Encina 信息的书籍:

    CICS 文档

    CICS 文档提供了关于管理 CICS 产品和关于基于 CICS 应用程序设计 接口(API)开发应用程序的信息。这些信息是特定于在 AIX、Solaris、 HP-UX 和 Windows NT 操作系统上 CICS 的使用。CICS 文档包括下列书籍:

    CICS 系列文档

    CICS 系列文档提供的信息有助于所有平台上(包括大型机)的 CICS 用户。 CICS 系列文档包括下列书籍:

    Encina 管理性文档

    Encina 管理性文档包括管理 AIX、Solaris、HP-UX 和 Windows NT 上的 Encina 产品的 指南和参考资料。它包括下列文档:

    另外,Encina 文档集包括对所有管理接口的参考页面。Encina 管理参考页面 以 HTML 和 PostScript 格式提供,但是它们不能作为印刷文档格式订购。参阅 概念与功能快速入门, 以获得随 TXSeries 产品提供的关于特定 Encina 参考页面的更详细信息。

    Encina 程序设计文档

    Encina 程序设计文档同时包括有关开发基于 Encina API 的应用程序的指南和参考 信息。Encina 提供 C、C++、COBOL 和 Java 程序设计语言的 API。Encina 程序设计 文档(保留了大量来自 Encina 的上一个版本未更改的内容)包括下列手册:

    Encina 文档集还包括所有程序设计接口的参考页面。Encina 程序设计参考页面 以 HTML 和 PostScript 格式提供,但是它们不能作为印刷文档订购。参阅 概念与功能快速入门 可以得到更详细的关于 TXSeries 产品提供的特定 Encina 参考页面的信息。


    第 2 章 CICS:新功能

    以下列表描述了 CICS 中的新功能:


    第 3 章 Encina:新功能

    本章描述了对 IBM TXSeries 发行版 4.2 有影响的 Encina 管理和程序设计的增加和更改部分。除非 特别注明,否则本章中所有谈论的更改都成文与适当的 Encina 文档中。


    Encina 管理:新功能

    以下说明描述了 Encina 管理的新功能:


    Encina 程序设计:新功能

    本章节描述了影响 Encina 程序设计的增加和更改部分。 本章节按部件组织。

    Encina 监视器

    本节讨论了涉及监视器设计方面的增加和更改部分。 除非注明,这些更改都成文于 Encina 监视器程序设计指南 或在监视器函数或数据类型所涉及的参考页面中。

    下列更改适用于 Encina 监视器的 COBOL 接口:

    Encina SFS

    本节讨论了涉及结构化文件服务器(SFS)程序设计方面的增加和更改部分。 这些更改成文于 Encina SFS 程序设计指南或 在它们所涉及的 SFS 函数或数据类型的参考页面中。

    Encina 工具箱

    本节讨论了涉及用 Encina 工具箱进行程序设计方面的增加和更改部分。 除非注明,否则这些更改成文于 Encina 工具箱程序设计指南 以及在涉及它们的函数或数据类型的参考页面中。

    Encina++

    本章节讨论了涉及 Encina++ 程序设计方面的添加和更改部分。


    Encina 文档:新功能

    以下是 Encina 文档集内的新功能:


    第 4 章 TXSeries 4.2 中修正的缺陷

    本章主要描述了本发行版中修正的在 CICS 和 Encina 的以前发行版中存在的 缺陷和局限。以下章节按组件组织。


    Encina Enconsole

    Enconsole 中的下列缺陷已被修正:


    Encina 控制程序(enccp)

    enccp 接口中的以下缺陷已修改:


    Encina 监视器

    Encina 监 视器中的下列缺陷已修正:


    Encina PPC

    Encina 同级间通信(PPC)执行体和网关中以下缺陷已修正:


    Encina RQS

    Encina 可 恢复队列服务(RQS)中以下缺陷已修正:


    Encina SFS

    Encina 结构化 文件服务器(SFS)中的以下缺陷已修正:


    Encina 执行体

    Encina 执行体中的以下 缺陷已修正,包括事务服务(TRAN)、线程至 Tid 映射服务(ThreadTid)、 事务远程过程调用服务(TRPC)、Transactional-C(Tran-C)和事务接口定义语言(TIDL):


    Encina 服务器核心

    Encina 服务器核心中的以下缺陷已修正, 它包括锁定服务(LOCK)、日志服务(LOG)、恢复服务(REC)、 事务管理-XA 服务(TM-XA)和卷服务(VOL):


    Encina++/OTS

    Encina++ 和对象事务服务(OTS)中的以下缺陷已修正:


    Encina 实用程序

    Encina 实用程序中的以下缺陷已修正:


    遵循 XA 的资源管理器

    遵循 XA 的资源管理器与 TXSeries 4.2 的交互中的以下缺陷已修正:


    第 5 章 TXSeries 4.2 中已知的缺陷和限制

    本 章简要地描述了本产品中现有的缺陷和限制。以下章节按组件组织。如有可能,还给出 了变通办法。


    分布式计算环境(DCE)

    TXSeries AIX 版要求程序暂时修订(PTF)集 22 上的 IBM DCE 版本 2.1 (基于 OSF DCE 1.1)。TXSeries 已经与 PTF 集合 17 进行了测试, 它是 TXSeries 的先决版本。PTF 集合 17 包括 文件集版本 2.1.0.19 上的 dce.client.core.rte 和 版本 2.1.0.4 上的 dce.pthreads.rte,两者都安装 TXSeries 所必需的。然而,必须安装 PTF 设置 22 以避免在 TXSeries AIX 版 README 的题为“TXSeries AIX 版 V4.2 中的 已知缺陷”一节中描述的缺陷。可以 从下列 URL 下载 PFT 集 22: http://service.software.ibm.com/dssdce/ptfinfo/ptfsummary_current.html


    Encina Enconsole

    以下是 Enconsole 中已知的缺陷和限制:


    Encina 控制程序(enccp)

    下列是 enccp 界面中已知的缺陷和限制:


    Encina 监视器

    以下 是 Encina 监视器中已知的缺陷:


    Encina PPC

    以下是 Encina 同级间通信(PPC)执行体中已知的缺陷:

    还可参阅"Encina 监视器"获取有 关影响 PPC 的监视器缺陷的信息。


    Encina RQS

    以下 是 Encina 可恢复队列服务(RQS)中已知的缺陷:


    Encina SFS

    以下是结构化 文件服务器(SFS)应用程序设计接口中已知的缺陷:

    下面是 SFS 管理中已知的缺陷:


    Encina 执行体

    下面 是 Encina 执行体中已知的缺陷:


    Encina 服务器核心

    下面是 Encina 服务器核心中已知的缺陷:


    Encina++

    下面是 Encina++ 中已知的缺陷:


    CICS

    下面是 CICS 中已知的缺陷和限制:


    遵循 XA 的资源管理器

    下面是在与 TXSeries 4.2 的交互中 遵循 XA 的资源管理器已知的缺陷和限制:


    文档

    以下是 TXSeries 4.2 文档中已知的缺陷:

    有关使用 Enconsole 的附加信息

    下列注意讨论了未成文于 Encina 管理文档集的对 Encina Enconsole 程序的更改部分。

    下列说明提供了有关 UNIX 上的 Enconsole 的 tty 界面的附加信息。 使用 tty 界面之前请复查这些说明。

    下列说明应用于 Enconsole 的休眠方式:

    下列说明适用于 UNIX 平台上的 Enconsole 联机帮助:


    第 6 章 遵循 XA 的资源管理器

    本章提供了关于在 Encina 中所选择的遵循 XA 的资源管理器的兼容性信息。 如需有关在 CICS 环境下使用遵循 XA 的资源管理器的信息, 请参阅 CICS 问题确定指南。 请参阅特定于平台的发行说明(README 文件)获得有关 TXSeries 4.2 和资源管理器以及其它第三方软件的兼容性信息。


    在 Encina 环境中使用遵循 XA 的资源管理器

    本节提供了一些指令,用于在 Encina 环境中集成选中的遵循 XA 的资源管理器。

    要注册一个在 Encina 环境中使用的遵循 XA 的资源管理器, 应用程序必须调用 mon_RegisterRmi 函数 (如果该应用程序是一个监视器应用程序服务器)或调用 tmxa_RegisterRMI 函数(如果不是一个监视器应用程序)。 这两种函数都作为资源管理器的 XA 开关变量(一个指向 xa_switch_t 结构的指针)。 开关是特定于所使用的资源管理器;Encina 支持的资源管理器的值在表 1 中列出。

    应用程序还必须指定线程规则。对于监视器应用程序,当数据库名称在仓库中创建时(例如,使用 Enconsole), 才可指定线程规则。 它还能在对 mon_RegisterRmi 函数的调用中指定。 缺省值是串行化所有的操作(TMXA_SERIALIZE_ALL_XA_OPERATIONS)。 对于非监视器应用程序, 必须对 tmxa_RegisterRMI 函数指定线程规则。 Encina 支持的资源管理器的线程支持同样在 表 1 中列出。

    表 1. 注册资源管理器中使用的信息
    资源管理器 XA 开关 线程支持
    Informix 7.2 infx_xa_switch TMXA_SERIALIZE_ALL_XA_ OPERATIONS
    Oracle 8.03, 7.3.2.2/7.3.3 xaosw TMXA_SERIALIZE_ALL_XA_ OPERATIONS
    Sybase 11.1 sybase_xa_switch TMXA_MULTIPLE_ASSOCIATIONS
    DB2 5 (UDB), 2.1.2 db2xa_switch TMXA_SERIALIZE_ALL_XA_ OPERATIONS
    MQ 2.2/2.2.1, 5 MQRMIXASwitch TMXA_MULTIPLE_ASSOCIATIONS
    Microsoft SQL 服务器 6.5 版 msqlsrvxa1 TMXA_MULTIPLE_ASSOCIATIONS

    下例显示了在一个监视器应用程序服务器中,如何使用 XA 开关注册 Informix。 对于其它资源管理器,用相应的 XA 开关名称替代示例中的名称。

    #include <tmxa/tmxa.h>
    
    extern struct xa_switch_t infx_xa_switch;
    
        monStatus = mon_RegisterRmi(&infx_xa_switch, rmName, &rmid);
    

    下列代码段显示了如何在非监控服务器应用程序中注册 Informix :

    #include <tmxa/tmxa.h>
    
    extern struct xa_switch_t infx_xa_switch;
    
        tmxaStatus = tmxa_RegisterRMI(openString,
                                     "", /* close string */
                                     &infx_xa_switch,
                                     TMXA_SERIALIZE_ALL_XA_OPERATIONS,
                                     &rmid);
    

    打开字符串和关闭字符串可以在数据库供应商的文档中找到。
    注意:Pro*C 2.2.2.0.0 与 Oracle 7.3.2.2 版捆绑在一起, 除了处理结构化查询语言(SQL)部分以外,还试图处理 Pro*C 文件的 C 预处理器和 C 部分。 当试图处理 Encina 和 DCE 头文件时,该操作会失败。为解决这个问题, 请在执行 Pro*C 预处理前执行 C 预处理。

    在 Encina 环境中使用 DB2

    下列说明适用于在 Encina 中使用 DB2 :

    Microsoft SQL 服务器和 Encina 一起在 Windows NT 上使用

    Microsoft SQL 服务器使用的 SQL 预处理器并不接受用户自定义的 C 和 C++ 数据类型, 包括那些由 IDL 和 TIDL 使用的数据类型。要绕过这个限制, 应用程序代码的 SQL 部分必须放入一个单独的源代码模块。代码可分成三个源代码模块,如下所示:

    SQL 模块必须先由 SQL 服务器预编译器处理,然后由 C/C++ 编译器进行编译。 其它模块必须由 C/C++ 编译器进行编译。服务器代码的编译器任选项在 正在写入 Encina 应用程序Encina 面向对象编程指南中有描述。 图 1 显示了一个对于 SQL 模块和 XA 模块, 调用 SQL 预处理器和编译器的例子。

    图 1. SQL 服务器应用程序的编译器任选项

    nsqlprep sqlModule.sqc /NOSQLACCESS
    cl -nologo -DWIN32 -DWIN32_LEAN_AND_MEAN -W2 -Gz -c \
        -lc:\mssql\esql\include -ld:\mssdk\include -l. sqlModule.c
    
    cl -nologo -DWIN32 -DWIN32_LEAN_AND_MEAN -W2 -Gz -c \
        -lc:\mssql\esql\include -ld:\mssdk\include -l. xaModule.c
    

    编译结束后,这些模块链接成一个应用程序服务器的可执行文件。

    SQL 服务器 dbenlistxatrans 函数 将一个事务变成一个 XA 事务,允许 Encina 和 SQL 服务器在事务中一起使用。 如果应用程序没有调用这个函数,事务看起来落实了,但是没有任何信息写入数据库。

    对该函数的调用,必须放在不是由 SQL 预处理器处理过的源代码模块中。 该函数的第二个参数指定了该事务是否是一个 XA 事务。 设置为 TRUE图 2 显示了一个调用 dbenlistxatrans 函数的函数示例。 该包装函数(DbEnlistXaTran)然后就作为在 SQL 模块中每一 XA 事务的一部分被调用。

    图 2. 调用 dbenlistxatrans 函数的示例

    int DbEnlistXaTran()
    {
         PPDBPROCESS dbProcess;
         RETCODE retcode;
    
         if(!DbGetConnection(&dbProcess))
             return FALSE;
    
         retcode = dbenlistxatrans(dbProcess, TRUE);
         if (retcode == FAIL)
             return FALSE;
         else
             return TRUE;
    }
    

    这里也有 Microsoft SQL 预处理器的限制, 导致即使已在 sqlca.h 头文件定义过, SQLCODE 变量看起来还象没有定义过一样。 为解决这个问题,请在每个源代码模块中包括下列全局变量定义。

    long SQLCODE;
    
    注意:由于 Microsoft SQL 预编译器的特点, 在定义 SQLCODE 变量时,绝对不能使用 extern 关键字。

    第 7 章 有关 Encina Windows NT 版的附加信息

    本章提供有关用 Microsoft Visual C++ 和 Microsoft Visual Basic 建 立 Encina 应用程序的信息。它还提供有关将现有的 Encina Windows(3.1) 版应用程序移植到 Encina Windows NT 版(和 Windows 95 版)上的信息。


    与 Encina 一起使用 Microsoft Visual C++

    本节提供有关使用 Microsoft Visual C++ 和 Encina 的 WinTidl 工具在 Microsoft Windows NT(和 Windows 95)系统上 建立 Encina 和 Encina 应用程序的信息。 Encina 4.2 支持 Microsoft Visual C++ 4.2b 和 5.0 版。

    本节包含两个主题:

    注意:本节中,basename 指事务 接口定义语言(TIDL)文件的名称,不包括它的扩展名(.tidl)。 例如,当使用一个名为 inventory.tidl 的 TIDL 文件时, basenameinventory

    本节假设您熟悉 Microsoft Visual C++ 和 Encina 的 WinTidl 工具。 如需有关使用 WinTidl 的更多信息,请参阅 Encina 监视器程序设计指南

    建立 Encina 监视器应用程序服务器

    下面是使用 Microsoft Visual C++ 来建立一个监视器应用程序服务器的指示:

    1. 启动 Visual C++ 开发环境。从 File 菜单中选择 New 命令, 创建 Console Application 类型的新项目工作区。 从 Type 字段中选中 Console Application,输入项目名称(例如,project1), 接着选中 Create 按钮。

    2. 使用 Windows NT 文本编辑器,在项目的同一目录中, 创建 TIDL 和事务属性配置文件(TACF)等文件。 如需有关创建 TIDL 和 TACF 文件的信息,请参阅 Encina 监视器程序设计指南

    3. 在 Visual C++ 开发环境下, 从 Insert 菜单中 选择 Files into Project 命令,将 TACF 和 TIDL 文件插入项目。

    4. 启动 WinTidl 工具。在 WinTidl 中,在 Source Files 下选择适当的 TIDL 和 TACF 文件, 创建生成文件、服务器源文件和服务器可执行文件,在 Component Options 下 选定 Server SourceBulid Server 复选框, 接着从 Build 菜单中选定 Build Components

    5. 在命令提示处,使用文件管理器或 Rename 命令, 将由 WinTidl 创建的 s_basename.c 模板文件重新命名为 与项目相同的 basename。 (对于 Encina++ 应用程序,模板文件命名为 basename.cpp。) 例如,如果项目名称为 project1 而模板文件名称为 s_inventory.c, 将 s_inventory.c 重新命名为 project1.c
      注意:重新命名这个文件是重要的,因为每次运行与该项目相关的生成文件时, 都会重写 s_basename.c(或 basename.cpp)模板文件。 如果 TIDL 或 TACF 文件已被更改,则可能要重复这个步骤, 并且将在7中写入的代码复制到文件的新版本中。

    6. Insert 菜单中选择 Files into Project 命令, 将重新命名的服务器模板文件插入项目。

    7. 在 Microsoft Visual C++ 开发环境中(用于本节中余下的步骤), 在重新命名的模板文件中写入管理器功能的代码。

    8. Bulid 菜单中选中 Setting 命令。 在项目设置对话框中,扩充调试配置的文件树并选择 TIDL 文件。 在 Build command(s) 字段中, 选择 Custom Build 标签并输入以下命令。
      nmake
      /f basename.mak setenv tidlserver idlserver
      

      Output file(s) 字段中输入下列文件名:

    9. 对于发行本配置重复步骤 8。

    10. 单击 OK 按钮以保存项目设置。

    11. Insert 菜单中选择 Files into Project 命令, 将下列文件插入项目中。

    12. 关闭并重新打开项目工作区, 使 Microsoft Visual C++ 识别有必要重新建立由 WinTidl 创建的文件。 从 File 菜单中通过选择 Close Workspace 命令, 关闭这个工作区;从 File 菜单中选择 Open Workspace 命令, 再次打开这个工作区。

    13. Bulid 菜单中选择 Setting 命令。 缩叠调试文件树,并在项目设置对话框中选择 C/C++ 标签。

    14. 一般类别中,在 Preprocessor definitions 字段输入如下:

    15. 在代码产生类别下,将 Use run-time library 选项设置为 Multithreaded DLL

    16. 在项目设置对话框中选择 Link 标签。 一般类别中,在 Object/library modules 字段中, 输入服务器使用的库文件名称。例如,可以包括下列库:

    17. 对于发行本配置可重复步骤 13 到 16

    18. 单击 OK 按钮以保存项目设置。

    19. Tools 菜单中选择 Options 命令。 选择 Directories 标签。

    20. Show directories for 字段中 选择 Include files。输入 Encina 和 DCE 头文件的目录位置(例如,C:\OPT\ENCINA\INCLUDEC:\Program Files\DCE\dcelocal\include)。

    21. Show directories for 字段中, 选择 Library files。 输入 Encina 和 DCE 头文件的目录位置(例如,C:\OPT\ENCINA\INCLUDEC:\Program Files\DCE\dcelocal\include)。

    22. 编译项目。

    建立 Encina 监视器客户机

    下面是使用 Microsoft Visual C++ 来建立一个监视器客户机的说明:

    1. 启动 Microsoft Visual C++ 开发环境。 在 File 菜单上选择 New 命令, 创建 Console Application 或 MFC AppWizard(exe 或 dll)类型的新项目工作区。 从 Type 字段中选中 Console ApplicationAppWizard, 输入项目名称(例如,project1),接着选中 Create 按钮。

    2. 使用 Windows NT 文本编辑器,在项目的同一目录中,创建 TIDL 和 TACF 文件。 如需有关创建 TIDL 和 TACF 文件的信息,请参阅 Encina 监视器程序设计指南。 TIDL 文件必须与服务器中所使用的文件相匹配。

    3. 在 Microsoft Visual C++ 开发环境下, 从 Insert 菜单中 选择 Files into Project 命令,将 TACF 和 TIDL 文件插入项目。

    4. 启动 WinTidl 工具。在 WinTidl 中,在 Source Files 下选择适当的 TIDL 和 TACF 文件, 创建生成文件、客户机源文件和客户机 DLL,在 Component Options 下 选定 Client SourceBuild Client 复选框, 接着从 Build 菜单中选定 Build Components

    5. 在 Microsoft Visual C++ 开发环境下(用于本节中余下的步骤), 从 Build 菜单中选择 Settings 命令。 在项目设置对话框中,扩充调试配置的文件树并选择 TIDL 文件。 在 Build command(s) 字段中, 选择 Custom Build 标签并输入以下命令:
      nmake /f basename.mak setenv tidlclient idlclient clientdll
      

      Output file(s) 字段中输入下列文件名:

    6. 对于发行本配置可重复步骤 5

    7. 单击 OK 按钮以保存项目设置。

    8. 关闭并重新打开项目工作区, 使 Microsoft Visual C++ 识别有必要重新建立由 WinTidl 创建的文件。 从 File 菜单选择 Close Workspace 命令, 关闭这个工作区;从 File 菜单选择 Open Workspace 命令,再次打开这个工作区。

    9. Build 菜单中选中 Settings 命令。 缩叠调试文件树,并在项目设置对话框中选择 C/C++ 标签。

    10. 一般类别中,在 Preprocessor definitions 字段中输入如下:

    11. 代码产生类别中,将 Use run-time library 选项设置为 Multithreaded DLL

    12. 在项目设置对话框中选择 Link 标签。 一般类别下,在 Object/library modules 字段中, 输入客户机使用的库文件名称。 对于 Encina 应用程序,例如,必须包括 basename.liblibEncina.liblibEncMonCli.liblibdce.libpthreads.lib(对 IBM DCE)或 dec32.lib(对 Gradient DCE)。 对于 Encina++ 应用程序,必须包括前面的库文件和 libEncPlusCli.lib

    13. 对于发行本配置可重复步骤 9 到 12。

    14. 单击 OK 按钮以保存项目设置。

    15. Tools 菜单选择 Options 命令。 选择 Directories 标签。

    16. Show directories for 字段中 选择 Include files。输入 Encina 和 DCE 头文件的目录位置(例如,C:\OPT\ENCINA\INCLUDEC:\Program Files\DCE\dcelocal\include)。

    17. Show directories for 字段中, 选择 Library files。 输入 Encina 和 DCE 头文件的目录位置(例如,C:\OPT\ENCINA\INCLUDEC:\Program Files\DCE\dcelocal\include)。

    18. 写下客户机代码。如果正在使用 TIDL-generated 头文件, 请确保在客户机代码中包括了 basename.h 文件。 另外,在 basename.h 文 件的 include 语句前先定义符号 USEDLL(#define USEDLL); 在 basename.h 文 件的 include 语句后面取消定义(#undef USEDLL)。

    19. 编译项目。

    将监视器客户机创建为一个 MFC 应用程序的注意事项

    当将监视器客户机创建为 MFC 应用程序时,请遵照下列附加指南:


    在 Encina 下使用 Microsoft Visual Basic

    本章提供了关于使用 Microsoft Visual Basic(版本 4.0 和 5.0 受支持)来在 Microsoft Windows NT(和 Windows 95)上建立 Encina 客户机应用程序的信息。 使用 Visual Basic 示例文件,可以在 Encina 安装目录的 example\telshop\client\msvb 中找到(例如,C:\opt\encina),在这个部分建立 Visual Basic 客户机的信息。
    注意:Encina 监视器程序设计指南的第 7 章中可以 用 WinTidl 自动生成 Visual Basic 过程说明文件的说明是不正确的。 该功能不可用;而是必须用这部分的功能信息和数据类型手工创建 Visual Basic 过程说明文件。

    在 Visual Basic 中运行 Encina 客户机应用程序

    Visual Basic add-in EncinaAddin.dll 对在交互式 Visual Basic 环境下运行 Encina 客户机应用程序提供了一个解决办法。 Visual Basic 对运行多线程动态链接库(DLL)不支持。 Encina DLL 是多线程的,这个 add-in 需要在交互式 Visual Basic 环境下 运行 Encina 客户程序。

    在交互式开发环境(IDE)下运行的 Visual Basic 应用程序不是作为独立进程运行的。 而是运行在 Visual Basic IDE 进程。结果, 由应用程序创建的线程甚至在应用程序运行终止以后继续运行; 当应用程序终止时,由应用程序线程使用的 DLL 由 Visual Basic 卸出。 这个情况引起 IDE 异常退出。 add-in 通过 Visual Basic IDE 的终生时效保持 DLL 的装入,来缓解这个问题。

    要安装 add-in,在命令提示下运行 setupVbAddin.exe, 或在 Start 菜单上选择 Run 选项。 不要求任何命令行选项。在 add-in 成功安装以后,可以从 Visual Basic IDE Add-Ins/Add-In Manager 菜单中激活它。

    add-in 预装入用于应用程序的所有 DLL。也检查环境变量 ENCINA_VB_DLL_LOCATION 是否设置。 该环境变量该包含那个包含于 DLL 列表的文件的全部路径名。 如果该环境变量没有设置,将提示输入个别的 DLL 名称或包含所有 DLL 列表的文件名。 在 Windows NT 系统的特性对话框的 Environment 标签上, 设置环境变量 ENCINA_VB_DLL_LOCATION 。

    add-in 然后试图装入除已知的 Encina 和 DCE DLL 以外的所有的用户 DLL。 DLL 装入的保留时间和 Visual Basic IDE 运行的时间一样长。 通常,仅输入文件的是包含对应用程序的远程过程调用的客户端代码的 DLL。 该 DLL 由使用 WinTidl 实用程序生成。 在 Visual Basic telshop 示例客户机的事件中,该文件包含 merchandise.dll行。

    调用 mon_ExitClient 函数引起 Visual Basic IDE 退出。 应用程序运行的直接结果作为 Visual Basic IDE 的一部分。 Transarc 推荐在开发期间 mon_ExitClient 函数不要调用(当应用程序运行在交互式 Visual Basic 环境)。

    注意,如果在相同的交互式 Visual Basic 进程中,调用 mon_InitClient 函数一次以上, 该函数返回 MON_PROTOCOL_ERROR。 add-in 保持 Encina DLL 的装入以通过应用程序的多个运行, mon_InitClient 函数在初次运行后返回 MON_PROTOCOL_ERROR。 因为在这种情况下该出错是意料之中的,可以安全地忽略它。

    下列过程给出了一个调试 Visual Basic 客户机的示例,在该事件中 telshop 示例客户机。 注意必需预装入 merchandise.dll;请参考以前的指示装入 DLL。

    1. 使用文本编辑器(例如,写字板),创建一个包含 merchandise.dll 行、 名为 myliblist.txt 的文件。

    2. 在系统特性对话框的 Environment 标签下, 对 myliblist.txt 的位置设置环境变量 ENCINA_VB_DLL_LOCATION (例如,C:\myliblist.txt)。

    3. 选择启动按钮。选择运行, 在打开字段输入 setupVbAddin.exe, 选择确定按钮。

    4. 启动 Visual Basic IDE 并且选择 Add-Ins/Add-in Manager 菜单项。

    5. 选择 Encina Addin 输入在 Add-in 管理器对话框中, 以致下次出现校验标记。

    注意:以前的过程在给定的机器上必须仅能执行一次。

    注意数据类型

    本节包含有关 Visual Basic 数据类型和它们关联的 C 和 TIDL 数据类型的信息。 如需得到有关在 Visual Basic 和 C 数据类型的关系, 以及从 Visual Basic 程序的 C 语言 DLL 调用函数的更多的信息, 请参考 Visual Basic 文档。

    支持的数据类型

    一般的,简单的 TIDL 和 C 数据类型(对于变量和返回值都一样)顺利地转换进 Visual Basic, 但是更多的复杂的数据结构需要附加的工作。 有些数据结构--例如,链接表--在 Visual Basic 中不是非常固有的数据结构。

    有些函数返回动态分配内存,如果客户程序做了许多远程过程调用(RPC), 内存必须释放。否则,进程的大小增加。对释放分配内存使用 cdll_free 过程。

    标量数据类型

    表 2 包含 TIDL、C 和 Visual Basic 版的标量数据类型的映射。 当作为函数调用的结果返回,这些所有的数据类型正常地通过参考(作为指针), 说明为 As Long; 而且这些所有数据类型正常地通过值(ByVal), 说明为没有带 ByVal 关键字的 As 类型

    要从 Visual Basic 传送 NULL,使用 0&vbNullString 为适当的的方法。

    表 2. 等价于 TIDL、C 和 Visual Basic 数据类型(标量)
    TIDL 数据类型 C 数据类型 Visual Basic 数据类型
    boolean unsigned char ByVal As Boolean
    boolean * unsigned char * As Boolean
    byte unsigned char ByVal As Byte
    byte * unsigned char * As Byte
    char (字符数据类型一直在 TIDL 没有签名。) unsigned char ByVal As Byte
    char * (字符数据类型在 TIDL 中一直没有签名。) unsigned char * As Byte
    double double ByVal As Double
    double * double * As Double
    error_status_t unsigned long ByVal As Long
    error_status_t * unsigned long * As Long
    float float ByVal As Single
    float * float * As Single
    [unsigned] long [unsigned] long ByVal As Long
    [unsigned] long * [unsigned] long * As Long
    [unsigned] short [unsigned] short ByVal As Integer
    [unsigned] short * [unsigned] short * As Integer
    [unsigned] small [unsigned] char ByVal As Byte
    [unsigned] small * [unsigned] char * As Byte

    数组和字符串数据类型

    表 3 包含对于 TIDL、C 和 Visual Basic 数组和字符串数据类型的映射。 在这张表中,baseType 可以是任一列于表 2 的标量数据类型 或是一个字符串,而 arrayVar 是一个数组变量名。

    当使用数组数据类型时,使用下列方法着手处理; 这些对于所有列于表 2 的标量数据类型和字符串数组进行处理。

    当使用字符串数据类型时注意以下方面:


    表 3. 等价于 TIDL、C 和 Visual Basic 数据类型(数组和字符串)
    TIDL 数据类型 C 数据类型 Visual Basic 数据类型
    baseType arrayVar[n] (数组作为输入或输入/输出参数传递。) baseType arrayVar[n] As baseType
    baseType ** (数组作为输出参数传递。) baseType ** As Any
    baseType ** (数组从一个函数返回。) baseType ** As Long
    string (字符串作为输入或输入/输出参数传递。) char * ByVal As String
    string * (字符串作为输出参数传递。) char ** As Any
    string * (字符串从一个函数返回。) char ** As Long

    结构、枚举类型和常数

    表 4 包含对于 TIDL、C 和 Visual Basic 结构、 枚举数据类型和常数的映射。 当使用这些数据类型时注意以下方面:


    表 4. 等价于 TIDL、C 和 Visual Basic 数据类型(结构、枚举类型和常数)
    TIDL 数据类型 C 数据类型 Visual Basic 数据类型
    const #define Global Const
    enum enum Global Const
    typedef typedef 非等价的
    typedef struct{ ... } struct_variable typedef struct{ ... } struct_variable Type struct_variable ... End Type (这是用户自定义的类型。)
    struct_variable * (作为输入/输出参数传递。) struct_variable * As struct_variable
    struct_variable ** (作为输出参数传递。) struct_variable ** As Any
    struct_variable ** (从函数返回。) struct_variable ** As Long

    不支持的数据类型

    下列 Visual Basic 数据类型在 TIDL 或 C 中没有直接等价的数据类型:

    注意:对于自动对象或自动数据类型没有支持。

    下列 TIDL 结构不受 Visual Basic 支持:

    支持 Encina 函数

    在 Visual Basic 中,只有一个 Encina 应用程序设计接口的子集得到支持。 该部分列示在 Visual Basic 支持的 Encina 函数中,提供每个函数的说明, 而且提供函数的简短描述。函数包含在指定的过程说明文件中, 位于 Encina 安装目录的 include 目录下(例如,/opt/encina/include)。 如需得到有关这些函数的更多信息,请参考相应的 Encina C 参考页面。

    下列函数包含在 encina/encina.bas 过程说明文件中:

    下列函数包含在 tpm/mon/mon.bas 过程说明文件中:

    下列函数包含在 tx/tx.bas 过程说明文件中:

    下列函数包含于 tx/tx_extensions.bas 过程说明文件中:

    下列函数提供了 Visual Basic 等价于 C 函数操纵内存和字符串的函数。 如需得到有关这些函数更多的信息,请查阅标准的 C 参考; 注意在 C 函数没有 cdll_ 前缀。 这些函数包含在 encina/encina.bas 过程说明文件中:

    代码示例

    本节包含了利用 Visual Basic 实现公共的 Encina 操作的示例。 除图 10 之外,所有的示例代码在 Encina 的安装目录的 example\telshop\client\msvb\telshop.frm 文件中都可以找到(例如,C:\opt\encina), 在这个目录中有一个 README 文件, 列出了建立示例所需的步骤。

    图 6 显示了 Encina 客户机的初始化。 也演示了对初始化出错校验的简单方法。

    图 6. 初始化 Encina 客户机并且对出错校验

    lTX_Err = mon_InitClient(vClient, vCell)
    
    'If lTX_Err <> 0 And lTX_Err <> MON_PROTOCOL_ERROR Then
    'protocol error means that we called more than once
       If Check_monStatus_t(lTX_Err) <> 0 Then
          ...
          lTX_Err = tx_open()
          If Check_txStatus(lTX_Err, sErrText, 1) <> 0 Then
          ...
    

    图 7 显示事务如何启动。

    图 7. 启动事务

    lTX_Err = tx_begin()
    If Check_txStatus(lTX_Err, sErrText, 0) <> 0 Then
       ...
    

    图 8 显示事务如何滚回。

    图 8. 滚回事务

    lTX_Err = tx_rollback_f()
    If Check_txStatus(lTX_Err, sErrText, 1) <> 0 Then
       ...
    

    图 9 显示如何生成一个 RPC。 用户函数 merchandise_OrderItem, 由 WinTidl-generated .dll 文件提供,启动 RPC。

    图 9. 生成远程过程调用

    Call merchandise_OrderItem(CLng(resp1), CLng(resp2), lTX_Err)
    
    If lTX_Err <> 0 Then
       Call Check_monStatus_t(lTX_Err)
    End If
    ...
    If Get_tx_info(lTX_Err, sErrText) = False Then
       ...
    

    图 10 显示了在 Visual Basic 中如何将字符串用做 OUT 参数。 在代码的头两行,变量 SoutS$ 已经说明了。 然后,调用用户自定义的 merchandise 函数, 将指针的 Sout 值赋值给 C 字符串。

    使用 cdll_strlen 函数, 应用程序得到 Sout 指向的 C 字符串的大小, 并用这个大小设置 Visual Basic 字符串的长度(在 S$ 中)。 应用程序调用 cdll_strcpy 函数将 C 字符串复制到 Visual Basic 字符串。最后, 调用 cdll_free 函数,释放 Sout 使用的内存。

    图 10. 在 Visual Basic 中将字符串用做 OUT 参数

    Dim Sout As Long
    Dim S$
    merchandise(...,Sout,...)
    S$ = Space$(cdll_strlen(ByVal Sout))
    Sout = cdll_strcpy(ByVal S$, ByVal Sout)
    cdll_free(ByVal Sout)
    


    将应用程序从 Encina Windows 版移植到 Encina Windows NT 版

    为了将原来在 Encina Windows(3.1)版中使用的 16-位 PC-Tran 接口移植到 与 Encina Windows NT 版(和 Windows 95 版)一起提供的 32-位 TX 接口上, 必须将列于表 5 中的 Encina Windows 版的函数 更改为相应的 Encina Windows NT 版(和 Windows 95 版)函数。

    表 5. Encina Windows(3.1)版和 Encina Windows NT/95 版等价的函数
    Encina Windows(3.1)版 的函数 Encina Windows NT 版和 Windows 95 版的函数
    pct_TaskInit mon_InitClient
    pct_TaskDestroy
    pct_malloc malloc
    pct_free free
    pct_GetError
    pct_SetError
    pct_tx_get_rollback_return encina_GetAbortReasonencina_GetAbortString
    pct_tx_open tx_open
    pct_tx_close tx_close
    pct_tx_begin tx_begin
    pct_tx_commit tx_commit
    pct_rollback tx_rollback
    pct_info tx_info
    pct_make_trpc 应用程序 TRPC 函数

    Encina Windows 版应用程序设计接口(API)与 Encina Windows NT 版和 Windows 95 版 API 之间有一些差异。 在 Encina Windows NT 版和 Windows 95 版 API 中:


    索引

    特殊字符
    C E M P R S T V
    特殊字符
  • 文档
  • 新增和更改的功能 (163)
  • 编写
  • 监视器 COBOL 应用程序 (194)
  • 服务器核心
  • 修正的缺陷 (180)
  • 已知的缺陷 (204)
  • 工具箱
  • 新增和更改的功能 (162)
  • 监视器
  • 新增和更改的功能 (160)
  • 修正的缺陷 (169)
  • 已知的缺陷 (190)
  • 监视器 COBOL 应用程序
  • 编写 (193)
  • 监视器应用程序服务器
  • 建立 (225)
  • 建立
  • Encina 应用程序 (222), (230)
  • 监视器客户机 (226)
  • 监视器应用程序服务器 (224)
  • 客户机(监视器)
  • 建立 (227)
  • 缺陷
  • enccp (188)
  • Encina++ (181), (206)
  • Enconsole (166), (186)
  • PPC 执行体 (170), (195)
  • RQS (172), (198)
  • SFS (174), (200)
  • 服务器核心 (179), (203)
  • 监视器 (168), (189)
  • 文档 (210)
  • 修正的 (164)
  • 已知的 (183)
  • 执行体 (177), (201)
  • 遵循 XA 的资源管理器 (208)
  • 文档
  • 新增和更改的功能 (158), (159)
  • 已知的缺陷 (209)
  • 移植
  • Encina Windows 版应用程序 (232)
  • 执行体 (176)
  • 修正的缺陷 (178)
  • 已知的缺陷 (202)
  • 资源管理器 (217)
  • 与互操作 (219)
  • 遵循 XA 的资源管理器 (216)
  • 已知的 TXSeries 4.2 缺陷 (207)
  • 与互操作 (218)
  • C
  • CICS
  • 新和更改的功能 (157)
  • E
  • enccp
  • 已知的缺陷 (187)
  • Encina
  • 建立应用程序 (223), (231)
  • Encina Windows 版
  • 移植应用程序 (233)
  • Encina++
  • 修正的缺陷 (182)
  • 已知的缺陷 (205)
  • Enconsole
  • tty 界面 (212)
  • 联机帮助 (215)
  • 未成文的功能 (211)
  • 休眠方式 (214)
  • 修正的缺陷 (167)
  • 已知的缺陷 (185)
  • M
  • Microsoft Foundation Class 库 (221)
  • Microsoft Visual C++ (220)
  • Microsoft 基础类库 (228)
  • P
  • PPC 执行体
  • 修正的缺陷 (171)
  • 已知的缺陷 (196)
  • R
  • RQS
  • 修正的缺陷 (173)
  • 已知的缺陷 (197)
  • S
  • SERVERINIT 函数 (191)
  • SERVERTERMINATE 函数 (192)
  • SFS
  • 新增和更改的功能 (161)
  • 修正的缺陷 (175)
  • 已知的缺陷 (199)
  • T
  • tty 界面 (213)
  • TXSeries 4.2
  • 媒体/手册包 (153)
  • 修正的缺陷 (165)
  • 已知的缺陷 (184)
  • TXSeries 4.2 媒体/手册包
  • 软件 CD-ROM (154)
  • 文档 CD-ROM (155)
  • TXSeries 文档
  • 更改 (156)
  • V
  • Visual Basic (229)