PWJ2624 - 95/07 |
この資料は以下の製品について記述したものです。
この資料は DLL の中で getenv 関数を使って DOS の環境変数を取り出そうとしても、NULL が返される原因について説明したものです。
DLL の中からランタイムライブラリ関数 getenv は使用できません。
DOS の環境変数は環境変数テーブルを探すことによって見つけることができますが、Windows の DLL からこの環境変数テーブルを参照することができません。そのため、ランタイムライブラリ関数 getenv を Windows の DLL から使うことができません。
API の GetDOSEnvironment() 関数を使うことにより、getenv 関数の代用ができます。以下にサンプルプログラムを示します。
/**********************************************
* DLLGetEnv ( lpszVariableName )
*
* 引き数 lpszVariableName に環境変数名を渡すと、結果を戻り値として
* 返します。もし存在しない環境変数名なら NULL を戻り値として返しま
* す。
*
**********************************************/
LPSTR FAR PASCAL DLLGetEnv ( LPSTR lpszVariableName )
{
LPSTR lpEnvSearch;
LPSTR lpszVarSearch;
if ( !*lpszVariableName ) // NULL ポインタの確認
return NULL;
// DOS 環境変数ポインタの取得
lpEnvSearch = GetDOSEnvironment ();
// 文字列がある間繰り返す
while ( *lpEnvSearch )
{
// 探す環境変数名を保存
lpszVarSearch = lpszVariableName;
// 環境変数の検索
while ( *lpEnvSearch && * lpszVarSearch &&
*lpEnvSearch == *lpszVarSearch )
{
lpEnvSearch++;
lpszVarSearch++;
}
// もし名前が一致したなら、lpEnvSearch は "=" を指し、
// lpszVarSearch が NULL の界線を指す。そして
// lpszEnvSearch が環境変数の中身を示している。
// もし名前が一致しなければ、lpEnvSearch が次の環境変数を
// 指している。
if ( *lpEnvSearch == '=' && *lpszVarSearch == '\0' )
return ( lpEnvSearch + 1 );
else
while ( *lpEnvSearch )
lpEnvSearch++;
// ここに到達した時点で、一つの環境変数の確認が終了した。
// もし、次の文字が NULL なら検索に失敗した。
lpEnvSearch++;
}
return NULL;
}
(C)1995 Microsoft Corporation. All rights reserved.
マイクロソフト株式会社 テクニカル サポート
UP |
HOMEPAGE |