◀Unicode版開発トップへ
  • 691 Commit報告:(Fix) ANSIビルドでPPAマクロが実行できない
    • 692 Re: Commit報告:(Fix) ANSIビルドでPPAマクロが実行できない
      • 693 Re2: Commit報告:(Fix) ANSIビルドでPPAマクロが実行できない
  • [691] Commit報告:(Fix) ANSIビルドでPPAマクロが実行できない syat 2008年10月20日 23:04

    ANSIビルドで .ppa のマクロを実行するとエラーになる問題の対処です。
    rev1456でコミットしました。

    ごく小さい修正のためパッチを作らずコミットしています。
    原因は macro/CPPA.cpp の GetDeclarations でマクロ関数の登録文を作ってますが、関数名はwchar_t文字列なのに書式文字列が%tsになっていたため登録文がおかしくなりエラーになっていました。

    UNICODE版ではsprintfを自前で用意してあって、
     wchar_t, WCHAR → %ls
     char, ACHAR → %hs
     TCHAR → %ts
    と引数の型によって使い分ける必要があるようです。

    ANSIとUNICODEで切り替わるTCHARがテスト不足になりやすく危なげ。画面まわりとか。(CViewCommanderに数匹いそう)
    • [692] Re: Commit報告:(Fix) ANSIビルドでPPAマクロが実行できない kobake 2008年10月20日 23:19

      ▼ syatさん
      > ANSIビルドで .ppa のマクロを実行するとエラーになる問題の対処です。
      > rev1456でコミットしました。
      >
      > ごく小さい修正のためパッチを作らずコミットしています。
      > 原因は macro/CPPA.cpp の GetDeclarations でマクロ関数の登録文を作ってますが、関数名はwchar_t文字列なのに書式文字列が%tsになっていたため登録文がおかしくなりエラーになっていました。
      >
      > UNICODE版ではsprintfを自前で用意してあって、
      >  wchar_t, WCHAR → %ls
      >  char, ACHAR → %hs
      >  TCHAR → %ts
      > と引数の型によって使い分ける必要があるようです。
      >
      > ANSIとUNICODEで切り替わるTCHARがテスト不足になりやすく危なげ。画面まわりとか。(CViewCommanderに数匹いそう)

      ANSIビルドの動作保証は基本的に無視して突っ走ってきたので、
      こういう箇所はまだまだたくさんあると思います(数匹どころじゃないはずです)。すみません。。

      ANSIビルド安定化への道は2通りあります。

      (1) 現状のまま、%ls,%hs,%ts に気を遣いながら組んでいく。
      (2) 文字列型をすべて %ls (wchat_t) に統一する。(charが必要なAPI呼び出しはラップしてwchar_tで呼べるようにしておく)

      個人的には (2) を強く推奨しますが、
      その決定に際して深くは突っ込みません。

      #初期のUNICODE版は (2) の方針で組んでいましたが、
       議論の流れがTCHAR方針に寄っていたので、途中で (1) に切り替えた経緯があります。

      適宜議論するなどして良い方向を模索してください。>プロジェクトの皆様
      • [693] Re2: Commit報告:(Fix) ANSIビルドでPPAマクロが実行できない syat 2008年10月22日 00:32

        ▼ kobakeさん
        > ANSIビルドの動作保証は基本的に無視して突っ走ってきたので、
        > こういう箇所はまだまだたくさんあると思います(数匹どころじゃないはずです)。すみません。。
        バグがあることを咎めたりする意図は全然ありません。
        今こういう問題があると報告してみただけとです...

        UNICODE版の方針としては「ANSIビルドが通ることまでは確認する」みたいな記述を以前どこかで見た気がするのですが、見失ってしまいました。
        ANSIビルドは現時点で動作の保証はされていないということだったのですね。
        私の中でちょっと勘違いしている部分がありました。

        A版とU版Uビルドの2本があれば、U版Aビルドはあまり気にする必要がないのかもしれませんね。
        その場合はchar文字列を渡すところに注意すればよいので確認が楽です。