10.3 スクリプト制御インタフェースの記述例

スクリプト制御インタフェースの記述例を次に示します。

<例>

#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include "sthapi.h"

BOOL    TerminateScript ( LPCSTR lpszNetName, LPCSTR lpszFileName, UINT uProcessID )
{
   HKEY            hKey;
   LPCSTR          subKey = "SOFTWARE¥¥Hitachi¥¥JP1/Script¥¥PathName";
   char              valueName[32];
   char              value[_MAX_PATH];
   DWORD          valueSize = sizeof ( value ) ;
   HINSTANCE      hAPIInstance;
   tSPTHOpen       pSPTHOpen;
   tSPTHClose       pSPTHClose;
   tSPTHTerminate   pSPTHTerminate;
   HANDLE          hScript;

   // レジストリオープン
   if ( RegOpenKeyEx( HKEY_LOCAL_MACHINE, subKey, 0, KEY_QUERY_VALUE, &hKey ) != ERROR_SUCCESS )
   {
       // エラー処理
       return ( FALSE ) ;
   }

   // "SPTHL.DLL"のパスを取得
   strcpy ( valueName, "Path01" ) ;
   if ( RegQueryValueEx ( hKey, valueName, 0, NULL, ( LPBYTE ) value, &valueSize ) != ERROR_SUCCESS)
   {
       // エラー処理
       return ( FALSE ) ;
   }

   // "SPTHL.DLL"をロード
   strcat ( value, "¥¥SPTHL.DLL" ) ;
   hAPIInstance = LoadLibraryEx (  value, NULL, LOAD_WITH_ALTERED_SEARCH_PATH ) ;
   if ( hAPIInstance == NULL )
   {
       // エラー処理
       return ( FALSE ) ;
   }

   // 各関数のエントリーポイントを取得
   pSPTHOpen      = ( tSPTHOpen )GetProcAddress ( hAPIInstance, "SPTHOpen" ) ;
   pSPTHClose     = ( tSPTHClose ) GetProcAddress ( hAPIInstance, "SPTHClose" ) ;
   pSPTHTerminate = ( tSPTHTerminate ) GetProcAddress ( hAPIInstance, "SPTHTerminate" ) ;

   // オープン
   if ( pSPTHOpen ( lpszNetName, NULL, &hScript ) == FALSE )
   {
       FreeLibrary ( hAPIInstance ) ;
       return ( FALSE ) ;
   }

   // スクリプト実行の強制終了
   if (pSPTHTerminate ( hScript, lpszFileName, uProcessID, SPTH_TERM_CHILD ) == FALSE )
   {
       pSPTHClose ( hScript ) ;
       FreeLibrary ( hAPIInstance );
       return ( FALSE );
   }

   // クローズ
   pSPTHClose ( hScript ) ;

   // APIのインスタンスハンドルを解放する
   FreeLibrary ( hAPIInstance ) ;

   return ( TRUE ) ;
}