スクリプト制御インタフェースの記述例を次に示します。
<例>
#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 ) ;
}