ユーザーサブルーチン読み込み規則

MotionSolveのユーザーサブルーチンDLLs/SOsおよび関数読み込みには、3つの典型的なフェーズがあります。

オプションには以下のものがあります:
  1. usrsub_dll_nameの解決
  2. DLLの検索と読み込み
  3. DLLからのサブルーチン(関数)の読み込み

Phase I: DLL名の解決

usrsub_dll_nameは、XMLファイル内で要素属性として(要素レベルの設定)、またはコマンドラインオプションとして(モデルレベルの設定)、もしくは環境変数MS_USERSUBDLL(システム / マシンレベルの設定)によって明示的に指定できます。

usrsub_dll_nameがXML内で明示的に指定された場合(例えば、usrsub_dll_name = "msautoutils"またはusrsub_dll_name = "msautoutils.dll")、Phase IIに進みます。それ以外の場合、usrsub_dll_nameがXML(例えば、usrsub_dll_name = "NULL")で定義されていなければ、MotionSolveの実行ファイルがオプションのusrsub_dll_nameと共に起動されたかどうかを確認してください。例えば:
mbd_d input.xml output.mrf usrsub_dll_name
オプションのusrsub_dll_nameがコマンドラインにある場合、Phase IIに進みます。そうでない場合、オプションのusrsub_dll_name
mbd_d input.xml output.mrf

にあるようにコマンドラインになければ、環境変数MS_USERSUBDLLが定義されているかどうかを確認します。定義されていれば、usrsub_dll_nameを、MS_USERSUBDLLで定義されているように設定します。 そうでない場合、MS_USERSUBDLLが定義されていなければ、MotionSolveはエラーを表示します。

Phase II: DLLの検索と読み込み

Phase Iから得たusrsub_dll_nameを使って、MotionSolveはまずusrsub_dll_nameが絶対パス(例えば、usrsub_dll_name = ”C:/mydll_dir/myusersub.dll”)を含むかどうかを検証します。絶対パスを含む場合、MotionSolveはDLLの読み込みを試みます。成功裏に読み込むと、Phase IIIに進みます。読み込みが失敗に終わった場合、MotionSolveはエラーを表示します。

DLL名が絶対パスを含まない場合、MotionSolveは下記を順番に試みます:
  1. XMLファイルのディレクトリに応じてローカルで読み込み、続いてPhase IIIに進みます。
  2. 1.の試みが失敗に終わった場合、MotionSolveは、標準のインストールディレクトリNUSOL_DLL_DIR内を探し(例えば、<NUSOL_DLL_DIR>/dllname)、続いてPhase IIIに進みます。
  3. 2.の試みが失敗に終わった場合、MotionSolveはMS_USERDLL_DIR内を探します。

MS_USERDLL_DIRには、複数のパスを指定することが可能です。例えば、c:/mydll_dir1; e:/install/mydll_dir2; c:/mydll_dir3のように指定できます。

DLLが見つかって読み込まれるまで、それらは個々に検索されます。見つかったら、MotionSolveはPhase IIIに進みます。すべての試みが失敗に終わり何も見つからなかった場合、MotionSolveはエラーを表示します。

Phase III:DLLからのサブルーチン(関数)の読み込み

Phase IIでuserdllが読み込まれた後、MotionSolveusrsub_fnc_nameがXMLファイル内で指定されているかどうかをチェックします。例えば:
usrsub_fnc_name = "var101"
usrsub_fnc_nameがXMLファイル内で指定されていない場合、例えば:
usrsub_fnc_name = "NULL"

もしくは属性がない場合、要素タイプに応じてusrsub_fnc_nameにデフォルトの名称が割り当てられます。例えば、Reference_Variable要素用のusrsub_fnc_nameは、VARSUBです。

usrsub_fnc_nameがXMLファイル内の明示的名称によって、もしくはデフォルトで解決された後、MotionSolveはDLLからサブルーチン(関数)を読み込みます。