喉に刺さった小骨のように気になっていた、NT系における、メインウィンドウのUNICODE化が終了(これで、UNICODEでしか表現できないファイル名を持つファイルも直接ドラッグ&ドロップ可能に)。ということで、v1.10リリース。
なお、単一バイナリで、UNICODE に対応した OS(NT系)では UNICODE モードで動作させ、そうでない OS(Win95系)では、ANSI モードで動作させるには、OS 種類によって、UNICODE/ANSI API を自動的に使い分ける必要がある。(正確には、Win95系は描画系の一部(と文字列操作)のみ UNICODE API 使用可、ファイル系API などは全滅)
だが、ソースコードのあちこちに、
などと書いていくのは、悪夢に近い。
そこで、FastCopy では、Win32API UNICODE/ANSI のうち、文字列を引数や構造体メンバにとっているものについて、WCHAR/CHAR * -> void * に置き換えた、関数ポインタ群を大量に作った上で、パス名は基本的に void * で管理することで凌ぐことに。イメージとしてはこんな感じ。
(詳細はソースコード参照のこと)
これはこれで、文字列に対する型チェックがややルーズになることと、文字列定数を作るのが少し面倒になるデメリットはあるのだが、ロジック部分の記述がスッキリするメリットに比べれば、まあ我慢できるレベルかな。
一部環境で、実行が開始できない問題を修正した、v1.11リリース。
どうやら、GetDlgItemTextW()は、実際に格納に必要な領域が指定バッファに確保されているかではなく、第4引数で指定する「文字数」分が確保されているかどうかを(IsBadWritePtr(buf, buflen) 的に)確認している様子。
そして、今回、この第4引数に sizeof(buf)を指定していたため、UNICODEモードの場合に文字数指定にならず、バイト数になってしまい、この問題が発生することがあった模様。(実際に格納に必要なサイズは十分満たしていたのだが)
ともあれ、今後は、ipmsg のようにβ版→正式リリースの形にしようかな。
(その場合、fastcopy-ML でも作った方がいいかもしれない)
v1.12リリース。
ところで、私も昔使わせて頂いていた PDICの作者さんが、ご自分のファイル管理ソフトに、FastCopy のソースを取り込もうとトライされている様子。ただ、「色んな不可解なエラーが実行中にたくさん出て(?_?)な状態です」とのこと。
たしかに、ANSI/UNICODEを混在させているので、若干、判りにくい所があるかもしれません。状況を教えていただければ、ある程度はアドバイスできると思うのですが(^^;
ともあれ、こんな感じで、ソース等をいろんな方に流用してもらえると本望ですね。
_ ママン [IPMSG会社で全員使っています。現在社内のグループウェアをPHP+PostGreSQL で開発し文書の回覧をWEB..]
Categories
Android |
CeSleep |
comp_misc |
comp_tips |
fastcopy |
ipmsg |
mailman |
misc |
npop |
ScheEdit |
sigsleep |
tdiary |
thinkpad
_ o2 [1.11を使わせていただいてますが、src/dst履歴を0にしていると dstdirが 「?????????????..]
_ しろうず [掲示板で少し前に出ていたのと同じ件ですね。 http://www.ipmsg.org/bbs/bbs-fastcop..]
_ o2 [失礼しました、既に掲示板で出ていたのですね。 1.12いただきました。]