◀ANSI版開発トップへ
  • 1861 4/12版でバグ(再変換)
    • 1863 RE: 4/12版でバグ(再変換)
    • 1868 Re:4/12版でバグ(再変換)
      • 1872 Re2:4/12版でバグ(再変換)
      • 1875 Re2:4/12版でバグ(再変換)
        • 1876 CDllHandler/CBregexp改善
          • 1879 RE: CDllHandler/CBregexp改善
    • 1881 RE: 4/12版でバグ(再変換)
      • 1883 RE2: 4/12版でバグ(再変換)
  • [1861] 4/12版でバグ(再変換) みく 2002年04月14日 08:55


    ATOK未使用時にフラグが初期化されないので、CEditViewの解放時に

    CEditView.cpp:536行目
    if(m_hAtokModule)
    FreeLibrary(m_hAtokModule);

    で、

    例外処理 (初回) は sakura.exe (NTDLL.DLL) にあります: 0xC0000005: Access Violation。

    が発生します。

    CEditView.cpp:495行目
    m_hAtokModule = 0;

    を追加してくだい。
    • [1863] RE: 4/12版でバグ(再変換) やざき 2002年04月14日 15:33


      >例外処理 (初回) は sakura.exe (NTDLL.DLL) にあります: 0xC0000005: Access Violation。

      をを、そういうことだったんですね。なんで出るようになったんだろうとは思っていたのですが(^^;
      修正しておきます。ありがとうございますっ。
    • [1868] Re:4/12版でバグ(再変換) minfu 2002年04月14日 18:43

      ▼ みくさん
      >
      > ATOK未使用時にフラグが初期化されないので、CEditViewの解放時に
      >
      > CEditView.cpp:536行目
      > if(m_hAtokModule)
      > FreeLibrary(m_hAtokModule);
      >
      > で、
      >
      > 例外処理 (初回) は sakura.exe (NTDLL.DLL) にあります: 0xC0000005: Access Violation。
      >
      > が発生します。

      ご迷惑をおかけしております。

      よくよく考えてみるとCEditViewは4つあるのでFreeLibraryの部分が4回実行されることになりますね。
      どこかに移動させた方がよいのでしょうか?
      • [1872] Re2:4/12版でバグ(再変換) やざき 2002年04月14日 22:51


        >よくよく考えてみるとCEditViewは4つあるのでFreeLibraryの部分が4回実行されることになりますね。
        >どこかに移動させた方がよいのでしょうか?

        EditViewの上ならEditDoc?
        それか、EditWndかなぁ?
        EditAppでは必要ないから、EditWndでどう?
      • [1875] Re2:4/12版でバグ(再変換) げんた 2002年04月15日 01:46

        ▼ minfuさん
        > よくよく考えてみるとCEditViewは4つあるのでFreeLibraryの部分が4回実行されることになりますね。
        > どこかに移動させた方がよいのでしょうか?
        LoadLibraryが4回実行されるのだからFreeLibraryも4回実行されないとつじつまあわないですよね。
        こんな時こそSingletonかな?

        今回のようなミスを防ぐためにDLL動的ロードのWrapperを作ってありますのでできるだけ使ってください。
        (そういえばやざきさんが作った関数のロード方法がスマートだったのでDllHandlerにも取り込もうと思って忘れていました)

        --
        Singletonといえば、先週買ったModern C++ designという本で一般のオブジェクトをSingletonにするSingletonHolderというテンプレートクラスが紹介されていました。
        http://www.awl.com/cseng/titles/0-201-70431-5/
        ここからライブラリ本体をダウンロードできます。(使い方は本を見ないと解らないかもしれないが...)
        こういうのをうまく使ったり作ったりしていけるといいんですけどね。
        • [1876] CDllHandler/CBregexp改善 げんた 2002年04月15日 03:32

          ▼ げんたさん
          > (そういえばやざきさんが作った関数のロード方法がスマートだったのでDllHandlerにも取り込もうと思って忘れていました)
          dll-improve.zip としてUPしました。
          やざきさんのCPPA.cppの一部を共通関数としてCDllHandlerに移し、CBregexpもそちらを使うようにしました。

          大丈夫とは思いますが、あまりちゃんと試験してないです。確認したのはBregexpでバージョンが取得できることくらいです。特にCPPAの方を全然試験してない。

          --
          デバッグ中に初めて知ったんですが、起動時にBregexp.dllの初期化が8回くらい走るんですね。
          • [1879] RE: CDllHandler/CBregexp改善 やざき 2002年04月15日 11:08


            >> (そういえばやざきさんが作った関数のロード方法がスマートだったのでDllHandlerにも取り込もうと思って忘れていました)

            これって、わたしが発案者ではなくて、PPD.DLLのサンプルがそうなっていたんです。
            PPA.DLLの作者の方の名誉のために書いときます。:-)


            >デバッグ中に初めて知ったんですが、起動時にBregexp.dllの初期化が8回くらい走るんですね。

            これって何とかなりますか?
    • [1881] RE: 4/12版でバグ(再変換) やざき 2002年04月15日 11:20


      >CEditView.cpp:495行目
      > m_hAtokModule = 0;
      >
      >を追加してくだい。

      495行目だと、LoadLibraryに成功したときも、0になっちゃうので、479行目にしました~。
      • [1883] RE2: 4/12版でバグ(再変換) やざき 2002年04月15日 11:39


        >495行目だと、LoadLibraryに成功したときも、0になっちゃうので、479行目にしました~。

        ああ、そういうことか!!

        // それ以外のOSのときはOS標準を使用する
        m_uMSIMEReconvertMsg = 0;
        m_uATOKReconvertMsg = 0 ;
        + m_hAtokModule = 0; //@@@ 2002.04.14 MIK
        }

        MIKさんのパッチを見て正解を理解。MIKさんのにあわせておきまする。