Freigeben über


Überlegungen zur Programmierung

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

Bytereihenfolge
Die Werte der in WINAPPC definierten Konstanten. H und WINCSV. H ist von der Bytereihenfolge der verwendeten Hardware abhängig. Makros werden verwendet, um die Konstanten auf den richtigen Wert festzulegen.

Standardmäßig wird die Little-Endian-Bytereihenfolge von Intel verwendet, wobei das niedrige Byte eines 16-Bit-Werts gefolgt von dem hohen Byte folgt. Beim Definieren von Inlinemakros NON_INTEL_BYTE_ORDER Makros, das in WINAPPC verwendet wird. H und WINCSV. H wird die Bytereihenfolge für Konstanten nicht umkehren (umkehren). Nicht konstante Eingabeparameter in Verb-Steuerelementblöcken (VCBs) (z. B. Längen, Zeiger usw.) befinden sich immer im nativen Format.

Beispielsweise ist der primäre Rückgabecode von AP_PARAMETER_CHECK so definiert, dass er den Wert 0x0001 hat. Je nach Umgebung (Bytereihenfolge) kann die Konstante AP_PARAMETER_CHECK 0x0001 werden 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 festverdrahteten Werten verwendet, können Sie ein Makro definieren, um die Bytes auszutauschen. Es folgt 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 Ereignishandle im Feld Semaphor des VCB übergeben. Dieses Ereignis muss sich im nicht signalierten Zustand befinden, wenn es an APPC übergeben wird, und das Handle muss EVENT_MODIFY_STATE Zugriff 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 Host Integration Server ausgeführt werden sollen.

Einschränkungen
Für Windows-Betriebssysteme ist die Anzahl gleichzeitig zulässiger allgemeiner Dienstverben (CSVs) pro Prozess 64. Nur eines dieser Verben pro Thread kann synchron sein (blockierend).

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 macht Vorkehrungen für Multithread-basierte Windows-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 nur ein Konversationsverb gleichzeitig in jeder Unterhaltung hervorragend sein; andere Verben können jedoch für andere Unterhaltungen ausgegeben werden. Diese Richtlinie gilt auch für TP-Verben und TPs. Obwohl mehrere TP-Verben ausgegeben werden können, kann nur ein TP-Verb gleichzeitig für ein TP ausstehend sein. Dies gilt sowohl für Multithreadanwendungen als auch für Singlethreadanwendungen, die asynchrone Aufrufe verwenden.

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

Diese Option für die Ausrichtung von Struktur- und Union-Membern ist das Standardverhalten für Microsoft C/C++-Compiler. Stellen Sie zur Kompatibilität mit den bereitgestellten LUA-Bibliotheken (Logical Unit Application) sicher, dass Sie bei Verwendung anderer C/C++-Compiler oder beim expliziten Angeben einer Strukturausrichtungsoption bei Verwendung von Microsoft-Compilern eine entsprechende Struktur- und Union-Memberpackungsoption verwenden.

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

Alle Windows CSV-Anwendungen müssen die Windows-SNA-Erweiterung WinCSVStartup zu Beginn der Sitzung aufrufen, um die Anwendung zu registrieren, und WinCSVCleanup , um die Registrierung der Anwendung aufzuheben, wenn die Sitzung beendet ist.

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

  • LoadLibrary , um die Dynamic Link-Bibliotheken WINAPPC.DLL oder WAPPC32.DLL zu laden.

  • GetProcAddress , um APPC für alle gewünschten Einstiegspunkte zur 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 ausgeben:

  • LoadLibrary , um WINCSV.DLL oder WINCSV32.DLL zu laden, die Dynamic Link-Bibliotheken für Windows CSV.

  • GetProcAddress , um CSV für alle gewünschten Einstiegspunkte in die DLL anzugeben, z. B. ACSSVC, WinAsyncCSV, WinCSVStartup und WinCSVCleanup.

    Der TP muss den FreeLibrary-Aufruf ausgeben, wenn die APPC- oder CSV-Bibliothek nicht mehr benötigt wird.

    Nachgeben an andere Komponenten
    Da die Windows-Umgebungen multithreaded sind, müssen keine anderen Komponenten zurückgegeben werden.