会话标识
HACL 体系结构不限于 52 个会话。因此,单字符会话标识(如 EHLLAPI 中使用的会话标识)不恰当。HACL 使用连接句柄的概念,连接句柄是简单的 32 位值,对应用程序没有特殊意义。连接句柄唯一标识特定连接(会话)。可以跨线程和进程使用连接句柄来引用相同的连接。
所有需要引用特定连接的 HACL 对象和方法都接受连接句柄。此外,为了向后兼容并允许从仿真器用户界面(不显示句柄)引用,某些对象和方法也接受传统的会话标识。应用程序可以通过使用 ECLConnList 对象枚举连接来获取连接句柄。每个连接均由一个 ECLConnection 对象表示。ECLConnection::GetHandle 方法可用于检索与该特定连接关联的句柄。
强烈建议应用程序使用连接句柄,而不是连接名称(EHLLAPI 短会话标识)。HACL 的未来实现可能会阻止使用连接名称的应用程序访问超过 52 个会话。在某些情况下,可能需要使用该名称,例如当要求用户输入应用程序要使用的特定会话的名称时。在下面的 C++ 示例中,提供了会话的名称。那么,应用程序会在连接列表中查找连接,并为该会话创建 PS 和 OIA 对象:
ECLConnList ConnList; // Connection list
ECLConnection *ConnFound; // Ptr to found connection
ECLPS *PS; // Ptr to PS object
ECLOIA *OIA; // Ptr to OIA object
char UserRequestedID;
//... user inputs a session name (A-Z or a-z) and it is put
//... into the UserRequesteID variable. Then...
ConnList.Refresh(); // Update list of connections
ConnFound = ConnList.FindConnection(UserRequestedID);
if (ConnFound == NULL) {
// Session name given by user does not exist...
}
else {
// Create PS and OIA objects using handle of the
// connection just found:
PS = new ECLPS(ConnFound.GetHandle());
OIA= new ECLOIA(ConnFound.GetHandle());
// The following would also work, but is not the
// preferred method:
PS = new ECLPS(UserRequestedID);
OIA= new ECLOIA(UserRequestedID);
}创建示例中显示的 PS 和 OIA 对象的第二种方法不是首选方法,因为使用的是会话名称而不是句柄。这将在代码的这一部分中创建一个隐式 52 会话限制。使用所示的第一个示例允许该代码段可用于任意数量的会话。