다음을 통해 공유


프로그래밍 고려 사항

이 항목에서는 Windows 운영 체제에서 APPC를 사용하여 TP(트랜잭션 프로그램)를 개발하는 방법에 대한 정보를 요약합니다.

바이트 순서 지정
WINAPPC에 정의된 상수의 값입니다. H 및 WINCSV. H는 사용되는 하드웨어의 바이트 순서에 따라 달라집니다. 매크로는 상수를 올바른 값으로 설정하는 데 사용됩니다.

기본적으로 Intel little-endian 바이트 순서는 16비트 값의 낮은 바이트와 높은 바이트 순으로 사용됩니다. 그러나 인라인 매크로를 정의할 때 WINAPPC에서 사용되는 NON_INTEL_BYTE_ORDER 매크로입니다. H 및 WINCSV. H는 상수의 바이트 순서를 역방향(대칭 이동)하지 않습니다. 동사 제어 블록(VCB)의 비 상수 입력 매개 변수(예: 길이, 포인터 등)는 항상 네이티브 형식입니다.

예를 들어 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에 전달될 때 서명되지 않은 상태여야 하며 핸들에는 이벤트에 대한 EVENT_MODIFY_STATE 액세스 권한이 있어야 합니다.

라이브러리 이름
동일한 컴퓨터에서 Win16 및 Win32 API 라이브러리의 공존을 지원하기 위해 Win32 DLL 이름이 변경되었습니다.

이전 DLL 이름 새 DLL 이름
WINAPPC.DLL WAPPC32.DLL
WINCSV.DLL WINCSV32.DLL

새 DLL 이름은 Host Integration Server에서만 실행되도록 하는 Win32 기반 애플리케이션에 사용해야 합니다.

제한
Windows 운영 체제의 경우 프로세스당 허용되는 동시 CSV(공용 서비스 동사) 수는 64개입니다. 스레드당 이러한 동사 중 하나만 동기(차단)될 수 있습니다.

APPC를 사용하면 프로세스당 최대 동시 대화 수는 15,000개입니다. 각 프로세스는 최대 15,000개의 동시 TP를 지원합니다.

여러 스레드
TP에는 동사를 발급하는 여러 스레드가 있을 수 있습니다. Windows APPC는 다중 스레드 Windows 기반 프로세스에 대한 프로비저닝을 만듭니다. 프로세스에는 하나 이상의 실행 스레드가 포함됩니다. 스레드에 대한 모든 참조는 다중 스레드 Windows 환경의 실제 스레드를 참조합니다.

RECEIVE_AND_POST, MC_RECEIVE_AND_POST, RECEIVE_AND_WAITMC_RECEIVE_AND_WAIT 제외하면 모든 대화에서 한 번에 하나의 대화 동사만 처리할 수 있습니다. 그러나 다른 대화에 대해 다른 동사를 발급할 수 있습니다. 이 지침은 TP 동사 및 TP에도 적용됩니다. 여러 TP 동사를 발급할 수 있지만 TP에서 한 번에 하나의 TP 동사만 처리할 수 있습니다. 이는 비동기 호출을 사용하는 다중 스레드 애플리케이션 및 단일 스레드 애플리케이션 모두에 적용됩니다.

패킹
성능 고려 사항의 경우 VCB는 압축되지 않습니다. 첫 번째 요소 뒤의 VCB 구조체 멤버 요소는 멤버 형식의 크기 또는 DWORD(4바이트) 경계 중 더 작은 경계에 맞춰 정렬됩니다. 결과적으로 DWORD는 DWORD 경계에 맞춰지고, WORD는 WORD 경계에 맞춰지고, BYTE 경계에 정렬됩니다. 예를 들어 주 반환 코드와 보조 반환 코드 사이에 2 바이트 간격이 있음을 의미합니다. 따라서 VCB의 요소는 제공된 구조체를 사용하여 액세스해야 합니다.

구조체 및 공용 구조체 멤버 맞춤에 대한 이 옵션은 Microsoft C/C++ 컴파일러의 기본 동작입니다. 제공된 LUA(논리 단위 애플리케이션) 라이브러리와의 호환성을 위해 다른 C/C++ 컴파일러를 사용하거나 Microsoft 컴파일러를 사용할 때 구조체 맞춤 옵션을 명시적으로 지정할 때 동등한 구조체 및 공용 구조체 멤버 압축 옵션을 사용해야 합니다.

애플리케이션 등록 및 등록 취소
모든 Windows APPC 애플리케이션은 세션 시작 부분에서 WinAPPCStartup 을 호출하여 애플리케이션을 등록하고 세션이 끝날 때 WinAPPCCleanup 을 호출하여 애플리케이션을 등록 취소해야 합니다.

모든 Windows CSV 애플리케이션은 세션 시작 부분에서 Windows SNA 확장 WinCSVStartup 을 호출하여 애플리케이션을 등록하고 WinCSVCleanup 을 호출하여 세션이 완료되면 애플리케이션을 등록 취소해야 합니다.

런타임 연결
런타임에 TP가 APPC에 동적으로 연결되려면 TP에서 다음 호출을 실행해야 합니다.

  • LoadLibrary - WINAPPC.DLL 또는 WAPPC32.DLL 동적 연결 라이브러리를 로드합니다.

  • GetProcAddress - APPC, WinAsyncAPPC, WinAPPCStartup 및 WinAPPCCleanup과 같은 DLL에 대해 원하는 모든 진입점에 APPC를 지정합니다.

    런타임에 TP가 CSV에 동적으로 연결되려면 TP가 다음 호출을 실행해야 합니다.

  • LoadLibrary - Windows CSV용 동적 연결 라이브러리인 WINCSV.DLL 또는 WINCSV32.DLL 로드합니다.

  • GetProcAddress - ACSSVC, WinAsyncCSV, WinCSVStartupWinCSVCleanup과 같은 DLL에 대해 원하는 모든 진입점에 CSV를 지정합니다.

    APPC 또는 CSV 라이브러리가 더 이상 필요하지 않은 경우 TP는 FreeLibrary 호출을 실행해야 합니다.

    다른 구성 요소에 대한 결과
    Windows 환경은 다중 스레드이므로 다른 구성 요소에 양보할 필요가 없습니다.