DLL で環境変数の設定No.00552
ひろ さん 01/12/29 20:46
 
 皆さん今日は、ひろです。
 全くβ版の話ではありませんが、マニアックな話なので、こちらに投稿します。

loaddll "EnvironmentVariable.dll";
loaddll "EnvironmentVariable.dll";
message dllfuncstr("EnvironmentVariable");
freedll;
というマクロで、二つ目の loaddll をコメントアウトすることにより、
dllfuncstr の結果が変わるということは、あり得るのでしょうか?
 もう少し、詳しく説明します。
(1)EnvironmentVariable.dll は自作の DLL で、GetPrivateProfileString
で INI ファイルから取得した値を、SetEnvironmentVariable で環境変数に
設定している。
(2)loaddll が一つであっても、ウィンドウを開いてから 2 度目のマクロの
実行では、希望通りの値となる
(3)loaddll が二つであれば、マクロの起動回数と、dllfuncstr の値は変わら
ない

 loaddll の回数などで、結果が異なるため DLL のソースがおかしいのかど
うかの判断をつきかねています。
 子細な事でも構いませんので、情報を頂ければ幸いです。

[ ]
RE:00552 DLL で環境変数の設定No.00554
杉浦 まさき さん 01/12/30 21:11
 
ひろさんこんばんは。
杉浦 まさき です。

>(1)EnvironmentVariable.dll は自作の DLL で、
>GetPrivateProfileString で INI ファイルから取得した値を、
>SetEnvironmentVariable で環境変数に設定している。

これはいつどのように実行しているんでしょうか?
ちなみに、家でも簡単なサンプルを作ってテストしてみましたが、
1回目の実行できちんと表示されていました。

// DLL source (EnvVarTest.dll)
#include <windows.h>

static char buf[1024];

extern "C" __declspec(dllexport) LPCSTR
GetEnv(LPCSTR varname)
{
    ::GetEnvironmentVariable(varname, buf, 1024);
    return buf;
}

extern "C" BOOL WINAPI
DllMain(HANDLE, DWORD r_f_c, LPVOID)
{
    if (r_f_c == DLL_PROCESS_ATTACH) {
        ::SetEnvironmentVariable("TEST", "FOO");
    }
    return TRUE;
}

// macro
loaddll hidemarudir + "\\EnvVarTest.dll";
message dllfuncstr("GetEnv", "TEST"); // "FOO" を表示
freedll;
endmacro;



[ ]
RE:00554 DLL で環境変数の設定No.00555
ひろ さん 01/12/31 01:54
 
 杉浦さん今日は、ひろです。
> これはいつどのように実行しているんでしょうか?
> ちなみに、家でも簡単なサンプルを作ってテストしてみましたが、
> 1回目の実行できちんと表示されていました。
 態々サンプルを作っていただき有り難うございました。

 結論を先に書けば、私の DLL ソースが良くありませんでした。Win32API
の GetEnvironmentVariable を使わず、ANCII の getenv を使っていました。
 ##K&R にも「その詳細は、処理系依存である。」と書いてあるのね(^^;。
                          ^^^^^^^^^^
 実は SetEnvironmentVariable も手元の書籍にはそういった関数が記載さ
れておらず、オンラインで見付けたソースでその存在を初めて知りました(^^;。
何分 VC などの商用アプリケーションを使っていないので、関数の逆引きに
苦労しています。
→そんな時にも田楽のソースを見ていたりします(^^)。

 ##オンラインで Win32API の詳細を無料で調べられるサイトってないのかな
あ〜。

[ ]
RE:00555 DLL で環境変数の設定No.00556
よも さん 01/12/31 14:01
 
こんにちは。

>何分 VC などの商用アプリケーションを使っていないので、関数の逆引きに
>苦労しています。
>→そんな時にも田楽のソースを見ていたりします(^^)。
>
> ##オンラインで Win32API の詳細を無料で調べられるサイトってないのかな
>あ〜。

http://www.microsoft.com/JAPAN/developer/library/jpwinpf/_win32_setenvironme
ntvariable.htm
をどうぞ。
すべての関数が日本語化されているわけではありませんが。

http://www.microsoft.com/japan/developer/default.asp
がホームページです。

[ ]
RE:00556 DLL で環境変数の設定No.00557
ひろ さん 01/12/31 18:05
 
 よもさん今日は、ひろです。
> すべての関数が日本語化されているわけではありませんが。
>
> http://www.microsoft.com/japan/developer/default.asp
 やはり探せばあるんですね。情報有り難うございました。逆引きできるか
どうかはまだ解りませんが、どちらにしても助かります。

[ ]