WindowsNTターゲットのフック関数のカスタマイズ手順


このドキュメントでは、ISaGRAF Ver.4/5ターゲットにフック関数を実装する手順を説明します。WindowsNTターゲットへの実装を例にします。
なお、この実装を行うには、ISaGRAF Ver.4/5開発ツールキット(NSS-I4-PRDK)が必要です。

    1. ISaGRAF Ver.4/5 NT ターゲットのソースファイルを開発ツールキットからコピーします。
    2. Visual C++でプロジェクト MakePrdk.dsw を開きます。
    3. 「ファイル」-「新規作成」メニューを開き、WinNT_large\IsaSmpHooksフォルダにWin32 スタティックライブラリISaSmpHookを作成します。
    以下の図で設定されているオプションと同様に設定してください。
    VisualC++でのプロジェクトの作成
    4. Windowsエクスプローラなどで、Visual C++ が作成したWinNT_Large\IsaSmpHooks ディレクトリ内にSmpHooks.c という名前で新しいファイルを作成します。
    5. ターゲット定義ファイル dsys0def.h ファイルに以下の行を追加します。

    #define ITGTDEF_KERHOOK_BEGCYCEXEC

    この定義により、毎サイクルの最初のフック関数kerHookBegCycExec() がコールされるようになります。
    フック関数にはいくつか種類があります。他のフックの設定に関しては、ISaGRAF Ver.4/5開発ツールキットのオンラインヘルプ(ProDK.chm)をご覧ください。
    6. IsaSmpHooksプロジェクトの設定(ReleaseとDebugの双方)をIsxlHsdプロジェクトと同じになるよう変更します。
    7. Visual C++でSmpHooks.cを開き、プロジェクトへ追加します。

    8. 下記のコードを追加してください。
    /**************************************************************************
    File: SmpHooks.c
    Author: GGR - CJ International
    Creation date: 27-Jun-2001 --- 4.10 Released ---
    ***************************************************************************
    ドキュメント:

    ***************************************************************************
    説明: メッセージを表示するための関数

    ***************************************************************************
    Modifications: (who / date / description)


    ***************************************************************************/
    #include <dsys0def.h>

    static int _CNT=0;


    /****************************************************************************
    function : kerHookBegCycExec
    description : 各サイクルの最初にコールされるフック関数

    warning :
    ****************************************************************************/
    void kerHookBegCycExec(void)
    {
      /* VM ウィンドウに 3000サイクル毎にメッセージを表示する */
      _CNT++;

      if (_CNT==3000)
      {
        printf("message every 3000 cycles\n");
        _CNT = 0;
      }
    }


 

最終更新:
2009-03-18 16:10
改訂:
1.4
評価点数:0 (0 件の投票)
Chuck Norris has counted to infinity. Twice.