初めまして。Win95系(Win95/98)でWSHが動作しない
と言うのが悔しくて、少しいじってみました。
・Ver. 1.4.3.3の CWSH.cpp をベースに変更し、Win95
とWinMeで現在のファイルのパスを取得する動作を確認
いたしました。(Editor.GetFileName()の呼び出し成功)
diff --dos -u1 CWSH_pre.cpp CWSH_aft.cpp > CWSH.diff
--- CWSH_Pre.cpp Sun Mar 09 02:05:58 2003
+++ CWSH_Aft.cpp Mon Nov 10 12:54:22 2003
@@ -205,3 +205,4 @@
#endif
- if(lstrcmpiW(pstrName, L"Editor") == 0)
+ // Nov. 10, 2003 FILE Win9Xでは、[lstrcmpiW]が無効のため、[_wcsicmp]に修正
+ if(_wcsicmp(pstrName, L"Editor") == 0)
{
@@ -263,3 +264,4 @@
wchar_t *Message = new wchar_t[SysStringLen(Info.bstrDescription) + 128];
- wsprintfW(Message, L"[Line %d] %ls", Line + 1, Info.bstrDescription);
+ // Nov. 10, 2003 FILE Win9Xでは、[wsprintfW]が無効のため、[swprintf]に修正
+ swprintf(Message, L"[Line %d] %ls", Line + 1, Info.bstrDescription);
SysReAllocString(&Info.bstrDescription, Message);
@@ -409,3 +411,4 @@
{
- if(lstrcmpiW(rgszNames[I], m_Methods[J].Name) == 0)
+ // Nov. 10, 2003 FILE Win9Xでは、[lstrcmpiW]が無効のため、[_wcsicmp]に修正
+ if(_wcsicmp(rgszNames[I], m_Methods[J].Name) == 0)
{
@@ -431,3 +434,4 @@
Info->Desc.lprgelemdescParam = Info->Arguments;
- lstrcpyW(Info->Name, Name);
+ // Nov. 10, 2003 FILE Win9Xでは、[lstrcpyW]が無効のため、[wcscpy]に修正
+ wcscpy(Info->Name, Name);
Info->Method = Method;
@@ -670,4 +674,5 @@
}
- delete Buffer;
- delete WideBuffer;
+ // Nov. 10, 2003 FILE 配列の破棄なので、[括弧]を追加
+ delete [] Buffer;
+ delete [] WideBuffer;
CloseHandle(File);
・つまり原因は、Win9X系で正常に動作しない関数の使用で、
「新規エディタウィンドウが起動」は、lstrcmpiW()が常に
0を返すため、最初のコマンドが起動していると思われます。
識者の方、検証をお願いできますでしょうか?
特に、Win2KやWinXPでも動作するかどうかや、VC++ 6.0以外
でもコンパイル可能かどうか等。
以上、長文失礼致しました。