Freigeben über


Überlegungen zur Programmierung

In diesem Thema werden Informationen zum Entwickeln von Transaktionsprogrammen (TPs) mit APPC unter Windows-Betriebssystemen zusammengefasst:

Byte-Sortierung
Die Werte von Konstanten, die in WINAPPC.H und WINCSV.H definiert sind, hängen von der Byte-Reihenfolge der verwendeten Hardware ab. Makros werden verwendet, um die Konstanten auf den richtigen Wert festzulegen.

Standardmäßig wird die Intel-Little-Endian-Byte-Reihenfolge verwendet, wobei das niedrige Byte eines 16-Bit-Wertes gefolgt von dem hohen Byte vorliegt. Beim Definieren von Inline-Makros wird jedoch das NON_INTEL_BYTE_ORDER-Makro, das in WINAPPC.H und WINCSV.H verwendet wird, die Bytereihenfolge für Konstanten nicht umkehren. Nichtkonstante Eingabeparameter in Verbsteuerelementblöcken (VCBs) (z. B. Längen, Zeiger usw.) befinden sich immer im systemeigenen Format.

Beispielsweise wird der primäre Rückgabecode von AP_PARAMETER_CHECK definiert, um einen Wert von 0x0001 zu haben. Abhängig von der Umgebung (Byte-Reihenfolge) kann die Konstante AP_PARAMETER_CHECK 0x0001 sein oder nicht. Einige Formate definieren den Wert so, wie er im Arbeitsspeicher angezeigt wird; andere definieren sie als 2-Byte-Variable. Da Sie nicht davon ausgehen können, dass die Anwendung immer bereitgestellte Konstanten anstelle von hartverkabelten Werten verwendet, können Sie ein Makro definieren, um die Bytes auszutauschen. Im Folgenden sehen Sie ein Beispiel für die Verwendung des Makros:

/* 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' */  

Ereignisse
Um Daten asynchron zu empfangen, wird ein Event-Handle im Semaphorfeld des VCB übergeben. Dieses Ereignis muss sich im nicht-signalisierte Zustand befinden, wenn es an APPC übergeben wird, und das Handle muss das Zugriffsrecht EVENT_MODIFY_STATE auf das Ereignis haben.

Bibliotheksnamen
Um die Koexistenz von Win16- und Win32-API-Bibliotheken auf demselben Computer zu unterstützen, wurden die Win32-DLL-Namen geändert.

Alte DLL-Namen Neue DLL-Namen
WINAPPC.DLL WAPPC32.DLL
WINCSV.DLL WINCSV32.DLL

Die neuen DLL-Namen sollten für Win32-basierte Anwendungen verwendet werden, die nur auf Hostintegrationsserver ausgeführt werden sollen.

Einschränkungen
Bei Windows-Betriebssystemen beträgt die Anzahl der pro Prozess zulässigen gleichzeitigen allgemeinen Dienstverben (CSVs) 64. Nur eines dieser Verben pro Thread kann synchron (blockierend) sein.

Bei Verwendung von APPC beträgt die maximale Anzahl gleichzeitiger Unterhaltungen pro Prozess 15.000. Jeder Prozess unterstützt bis zu 15.000 gleichzeitige TPs.

Mehrere Threads
Ein TP kann mehrere Threads haben, die Verben ausgeben. Windows APPC trifft Vorkehrungen für multithreadfähige Windows-basierte Prozesse. Ein Prozess enthält mindestens einen Ausführungsthread. Alle Verweise auf Threads beziehen sich auf tatsächliche Threads in den Multithread-Windows-Umgebungen.

Mit Ausnahme von RECEIVE_AND_POST, MC_RECEIVE_AND_POST, RECEIVE_AND_WAIT und MC_RECEIVE_AND_WAIT kann jeweils nur ein Konversationsverb gleichzeitig in einer Konversation aktiv sein; jedoch können Verben in anderen Konversationen verwendet werden. Diese Richtlinie gilt auch für TP-Verben und TPs. Obwohl mehrere TP-Verben ausgestellt werden können, kann jeweils nur ein TP-Verb auf einem TP ausstehen. Dies gilt sowohl für Multithreadanwendungen als auch für Singlethread-Anwendungen, die asynchrone Aufrufe verwenden.

Verpackung
Aus Leistungsgründen sind die VCBs nicht verpackt. Elemente der VCB-Struktur nach dem ersten Element werden entweder nach der Größe des Elementtyps oder nach DWORD-Begrenzungen (4 Byte) ausgerichtet, je nachdem, welcher kleiner ist. Daher werden DWORDs an DWORD-Begrenzungen ausgerichtet, WORDs werden an WORD-Begrenzungen ausgerichtet, und BYTEs werden an BYTE-Begrenzungen ausgerichtet. Dies bedeutet beispielsweise, dass zwischen den primären und sekundären Rückgabecodes eine 2-Byte-Lücke besteht. Daher sollten auf die Elemente in einer VCB nur mithilfe der bereitgestellten Strukturen zugegriffen werden.

Diese Option zur Ausrichtung von Strukturen und Union-Mitgliedern entspricht dem Standardverhalten der Microsoft C/C++-Compiler. Stellen Sie für die Kompatibilität mit den bereitgestellten LUA-Bibliotheken (Logical Unit Application) sicher, dass Sie bei Verwendung anderer C/C++-Compiler oder bei expliziter Angabe einer Strukturausrichtungsoption bei Verwendung von Microsoft-Compilern eine entsprechende Struktur- und Union-Memberverpackungsoption verwenden.

Registrieren und Aufheben der Registrierung von Anwendungen
Alle Windows APPC-Anwendungen müssen WinAPPCStartup am Anfang der Sitzung aufrufen, um die Anwendung zu registrieren, und WinAPPCCleanup am Ende der Sitzung, um die Anwendung zu deregistrieren.

Alle Windows-CSV-Anwendungen müssen die Windows SNA-Erweiterung WinCSVStartup am Anfang der Sitzung aufrufen, um die Anwendung zu registrieren, und WinCSVCleanup , um die Registrierung der Anwendung zu beenden, wenn die Sitzung abgeschlossen ist.

Laufzeitverknüpfung
Damit ein TP zur Laufzeit dynamisch mit APPC verknüpft werden kann, muss der TP die folgenden Aufrufe ausstellen:

  • LoadLibrary zum Laden der Dynamic Link Libraries WINAPPC.DLL oder WAPPC32.DLL.

  • GetProcAddress , um APPC für alle gewünschten Einstiegspunkte der DLL anzugeben, z. B. APPC, WinAsyncAPPC, WinAPPCStartup und WinAPPCCleanup.

    Damit ein TP zur Laufzeit dynamisch mit CSV verknüpft werden kann, muss der TP die folgenden Aufrufe ausstellen:

  • LoadLibrary zum Laden von WINCSV.DLL oder WINCSV32.DLL, den Dynamic Link Libraries für Windows CSV.

  • Die Funktion GetProcAddress wird verwendet, um CSV für alle gewünschten Einstiegspunkte in die DLL festzulegen, wie ACSSVC, WinAsyncCSV, WinCSVStartup und WinCSVCleanup.

    Der TP muss den FreeLibrary-Aufruf ausgeben, wenn die APPC- oder CSV-Bibliothek nicht mehr erforderlich ist.

    Nachgeben gegenüber anderen Komponenten
    Da Windows-Umgebungen multithreaded sind, besteht keine Notwendigkeit, anderen Komponenten den Vortritt zu lassen.