会话标识

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 会话限制。使用所示的第一个示例允许该代码段可用于任意数量的会话。