◀ANSI版開発トップへ
  • 3308 Win95系でWSHが動きました
    • 3311 RE: Win95系でWSHが動きました
  • [3308] Win95系でWSHが動きました FILE 2003年11月11日 02:50

     初めまして。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以外
    でもコンパイル可能かどうか等。

    以上、長文失礼致しました。
    • [3311] RE: Win95系でWSHが動きました げんた 2003年11月15日 11:08

      >・つまり原因は、Win9X系で正常に動作しない関数の使用で、
      >「新規エディタウィンドウが起動」は、lstrcmpiW()が常に
      >0を返すため、最初のコマンドが起動していると思われます。
      lstrcmpiはたしかにPlatform SDKを見ると Microsoft Layer for Unicode on Windows 95/98/Me System が必要だと書いてありますね.

      Windows XPではVisual C++, Borland C++の両方でコンパイル&実行できました。
      使用したのはGetSelectedString, InsTextです。