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 ) ; }