[リストへもどる]
一括表示
タイトルRe: Ayacyさんへ
記事No2383
投稿日: 2010/02/19(Fri) 23:36:32
投稿者Ayacy
とりあえず、送っていただいたスクリプトの不備(フォルダ名が異なりファイル名が同一なcplを登録すると、一意になるべき値の重複が防げない件)については、詳細をご返信していますので、そちらを参考にバグ修正していただければと思います。

タイトルRe^3: Ayacyさんへ
記事No2385
投稿日: 2010/02/20(Sat) 00:59:51
投稿者Ayacy
いくつか気になった点がありました。

■NT用の処理の中のリストビュー関連

NT用の処理の中で、CreateListViewとレジストリキーの読み込み/書き込みを苦労して書かれているようですが、
これって、ValueListを使えない事情があるのでしょうか?

■MultiEdit2つ

MultiEdit("DoNotLoad2", 12, DoNotLoad1$)
MultiEdit("DoNotLoad1", 12, DoNotLoad2$)

数字が入れ替わっているのって、何か意味がありますか?
(書き込みの方でも入れ替わっているので、結果として問題なく動作するのだとは思うのですが、なんか混乱しそうで...)

■on?

RegWriteSz(DoNotLoadKey2$, Path$, "on")
iniWriteString(Control_ini$, "Don't Load", Path$, "on")

これらって、"on" ではなくて、"no" を意図してないですか?

また、これですと、元々の(レジストリ/iniファイル読み込み時の)値が何であれ、書き込む際には「No」として書き込むようですが、問題ありませんか?

■DoNotLoad1・DoNotLoad2 の妥当性チェック

DoNotLoad1・DoNotLoad2 の値をレジストリやiniファイルへ書き込むとき、空行チェックは行われているようですが、重複チェックも行った方が良いような気がします。

タイトルRe^5: Ayacyさんへ
記事No2387
投稿日: 2010/02/21(Sun) 00:41:05
投稿者Ayacy
とりあえず、一カ所ご回答をしたいと思います。

-----
// 自分の環境(Windows 2000 SP 4)で以下の関数を実行すると
// iniNumKey("Control.ini", "Don't Load")
// 0を返します。
// iniNumKey("Control.ini", "Don\'t Load")
// でも結果は同じです。
-----

R-Scriptの「文字列」に関するルールは、こちらにあるとおりです。

http://www.yoshibaworks.com/ayacy/inasoft/webhelp/fd.cgi?R043

ダブルコーテーション(") 内では、シングルコーテーション(')が自由に登場することができます。
また、R-Scriptの「エスケープシーケンス」のルールとして、\' を ' として解釈するというものもあります。
このため、"Don't Load" と "Don\'t Load" は同じ文字列を意味します。

なお、シングルコーテーションによる文字列ルールもあり、それは上記と同じようなルールとなっています。
(シングルコーテーション(') 内では、ダブルコーテーション(")が自由に登場することができます。
 また、R-Scriptの「エスケープシーケンス」のルールとして、\" を " として解釈するというものもあります。
 このため、'Don"t Load' と 'Don\"t Load' は同じ文字列を意味します。)


で、ここで重要なのは、ダブルコーテーション(") 内でダブルコーテーション(") を登場させたり、
シングルコーテーション(') 内でシングルコーテーション(') を登場させたりする場合の注意です。
単純に書くことはできず、エスケープシーケンスを使わなければなりません。

すなわち、"Don"t Load" とは書けず、 "Don\"t Load" と書かなければなりません。
また、'Don't Load' とは書けず、 'Don\'t Load' と書かなければなりません。

これは、C言語のルールとほぼ同じ(C言語ではシングルコーテーション(')は文字列でなくて文字ですが)ですね。


……なわけで、2つの文字を書いても結果は同じなのですが、
キー内のセクション数が0になる件は、ちょっと調査してみます。

タイトルRe^6: Ayacyさんへ
記事No2388
投稿日: 2010/02/21(Sun) 01:00:47
投稿者Ayacy
> ……なわけで、2つの文字を書いても結果は同じなのですが、
> キー内のセクション数が0になる件は、ちょっと調査してみます。

どうも、INASOFTの共有ライブラリ(regclass.lib)がバグっているっぽいです。
共有ライブラリのバグとなると、波及範囲が大きそうな感じなので、詳しい調査に少々お時間をいただきたいと思います。

タイトルRe^7: Ayacyさんへ
記事No2389
投稿日: 2010/02/21(Sun) 01:32:12
投稿者Ayacy
どうやらバグではないっぽいです。

Control.ini という名前を別の名前(例えば Contro.ini 等)に変えたら、上手く動作したので、なにか、Windows が Control.ini という名前を特殊な形で認識する仕組みがある、ということかもしれません。

たぶん、IniFileMappingとか、そういう仕組みが働いているのではないかなぁと思います。

タイトルRe^8: Ayacyさんへ
記事No2390
投稿日: 2010/02/21(Sun) 12:24:16
投稿者Sinwa Hamada
control.rsc の[Don't Load]のキーの数が正しく取得できなかったのはウィンドウズ側の問題だったんですね。
わかりました。調べて頂き、有り難うございました。

追伸
control.rsc から非NTの処理を抜きました。URLは前と同じです。

タイトルRe^9: Ayacyさんへ
記事No2391
投稿日: 2010/02/21(Sun) 15:24:12
投稿者Ayacy
> control.rsc の[Don't Load]のキーの数が正しく取得できなかったのはウィンドウズ側の問題だったんですね。

問題というか、仕様ですね。
昔から存在している「Windows 9x用でcontrol.iniを扱っているプログラム」を、Windows NT/2000/XP等で動かした場合に、そのままの作りでうまく動作させるようにするためのOS互換機能のための仕組みということかと思います。

なので、control.iniを扱う処理自体は、Windows 9xならば、問題なく動作したんだと思います。

> 追伸
> control.rsc から非NTの処理を抜きました。URLは前と同じです。

あれ? なんで抜いてしまったんですか?
Windows 9x系なら問題なく動作するはずですが…?
(本来動かすべきではないWindows 2000で動作させようとしたから、IniFileMappingによるリダイレクトが発生しただけですよ)