本主题总结了有关在 Windows作系统上使用 APPC 开发事务程序(TP)的信息:
字节排序
WINAPPC.H 和 WINCSV.H 中定义的常量值依赖于所用硬件的字节排序。 宏用于将常量设置为正确的值。
默认情况下,使用 Intel 小端序字节排序,16 位值的低字节在前,高字节在后。 但是,在定义内联宏时,WINAPPC.H和WINCSV.H中使用的NON_INTEL_BYTE_ORDER宏不会反转(翻转)常量的字节顺序。 动词控制块(VCBs)(如长度、指针等)中的非常量输入参数始终采用本地格式。
例如,AP_PARAMETER_CHECK的主要返回代码定义为具有0x0001值。 根据环境(字节排序),常量AP_PARAMETER_CHECK可能为或可能不为0x0001。 某些格式定义值,因为它出现在内存中;其他人将其定义为 2 字节变量。 由于不能假定应用程序始终使用提供的常量,而不是硬连接值,因此可以定义用于交换字节的宏。 下面是使用宏的示例:
/* when NON_INTEL_BYTE_ORDER is specified, the APPC_FLIPI macro defined in WINAPPC.H macro becomes */
#define APPC_FLIPI(x) (x)
/* otherwise this macro flips bytes by defining */
#define APPC_FLIPI(X) APPC_MAKUS(APPC_HI_UC(X),APPC_LO_UC(X))
/* the AP_PARAMETER_CHECK macro is now defined using the APPC_FLIPI macro */
#define AP_PARAMETER_CHECK APPC_FLIPI (0X0001) /* X '0001' */
事件
为了异步接收数据,需要在 VCB 的信号量字段中传递事件处理句柄。 传递给 APPC 时,此事件必须处于未发信号状态,并且句柄必须具有修改事件状态的访问权限。
库名称
为了支持在同一台计算机上共存 Win16 和 Win32 API 库,Win32 DLL 名称已更改。
旧 DLL 名称 | 新 DLL 名称 |
---|---|
WINAPPC.DLL | WAPPC32.DLL |
WINCSV.DLL | WINCSV32.DLL |
新的 DLL 名称应用于基于 Win32 的应用程序,这些应用程序仅用于 Host Integration Server 上运行。
限制
对于 Windows 操作系统,每个进程允许的同时通用服务谓词(CSV)数量为 64。 每个线程中只能有一个动词是同步的(阻塞)。
使用 APPC 时,每个进程的最大同时会话数为 15,000。 每个进程最多支持 15,000 个并发 TP。
多个线程
TP 可以有多个发出谓词的线程。 Windows APPC 为基于多线程的 Windows 进程进行预配。 进程包含一个或多个执行线程。 所有对线程的引用都引用多线程 Windows 环境中的实际线程。
除 RECEIVE_AND_POST、 MC_RECEIVE_AND_POST、 RECEIVE_AND_WAIT和 MC_RECEIVE_AND_WAIT外,任何会话一次只能有一个对话谓词未完成;但是,可以针对其他对话发出其他谓词。 此准则也适用于 TP 谓词和 TP。 虽然可以发布多个 TP 动词,但在任一 TP 上同时只能有一个 TP 动词未完成。 这适用于使用异步调用的多线程应用程序和单线程应用程序。
包装
出于性能方面的考虑,VCB 未被打包。 VCB 结构成员元素在第一个元素之后,根据成员类型的大小或 DWORD(4 字节)边界进行对齐,以较小的一方为准。 因此,DWORD 在 DWORD 边界上对齐,WORD 在 WORD 边界上对齐,BYTE 在 BYTE 边界上对齐。 例如,这意味着主要返回代码和辅助返回代码之间存在 2 字节的差距。 因此,应仅使用提供的结构访问 VCB 中的元素。
对于结构和联合成员对齐,此选项是Microsoft C/C++ 编译器的默认行为。 为了与提供的逻辑单元应用程序(LUA)库兼容,在使用其他 C/C++ 编译器时,或者在使用Microsoft编译器时显式指定结构对齐选项时,请确保使用等效的结构和联合成员打包选项。
注册和取消注册应用程序
所有 Windows APPC 应用程序必须在会话开始时调用 WinAPPCStartup ,才能在会话结束时注册应用程序和 WinAPPCCleanup 以取消注册应用程序。
所有 Windows CSV 应用程序必须在会话开始时调用 Windows SNA 扩展 WinCSVStartup 来注册应用程序和 WinCSVCleanup ,以在会话完成后取消注册应用程序。
运行时链接
若要在运行时动态链接到 APPC 的 TP,TP 必须发出以下调用:
使用LoadLibrary加载动态链接库WINAPPC.DLL或WAPPC32.DLL。
GetProcAddress 在 DLL 的所有所需入口点上指定 APPC,例如 APPC、 WinAsyncAPPC、 WinAPPCStartup 和 WinAPPCCleanup。
要在运行时将 TP 动态链接至 CSV,TP 必须发出以下调用:
LoadLibrary 用于加载 windows CSV 的动态链接库WINCSV.DLL或WINCSV32.DLL。
GetProcAddress 在 DLL 的所有所需入口点上指定 CSV,例如 ACSSVC、WinAsyncCSV、WinCSVStartup 和 WinCSVCleanup。
不再需要 APPC 或 CSV 库时,TP 必须发出 FreeLibrary 调用。
让位于其他组件
由于 Windows 环境是多线程的,因此无需让步给其他组件。