2018年5月30日水曜日

Visual C++ の wprintf の独自仕様

今でこそかなり改善されましたが、Visual C++ は C/C++ 標準規格に沿わない独自仕様が多いことで有名です。
その中で意外と知られていないと思われるのが、wprintf 系関数で文字列を出力する際の指定子の違いです。

printf で %s を 指定した場合は const char *、%c を指定した場合は char (実際に渡るのは int ですが)を要求されます。

printf("%s %c\n", "string", 'c');

ここまでは当然のことですが、wchar_t が入ってくると話がややこしくなります。
C/C++ の規格上、wprintf などの wchar_t 系の関数であっても、%s は const char *、%c は char が要求されます。
そして、wchar_t を扱いたい場合は、%ls と %lc を使わなければなりません。

/* wprintf に char の文字列と文字を渡す場合 */
wprintf(L"%s %c\n", "string", 'c');
/* wprintf に wchar_t の文字列と文字を渡す場合 */
wprintf(L"%ls %lc\n", L"string", L'c');

しかしながら、Visual C++ はこの規格に従っておらず、wprintf に %s と %c を指定した場合、wchar_t であると解釈します。
また、char を渡したい場合は独自仕様の指定子 %hs と %hc を使う必要があります。

/* Visual C++ の独自仕様により、%s と %c は wchar_t が要求される */
wprintf(L"%s %c\n", L"string", L'c');
/* char を渡す場合、独自仕様の %hs と %hc を使用する */
wprintf(L"%hs %hc\n", "string", 'c');

2018年2月22日木曜日

PictureFan ver.0.35.0 を公開

PictureFan の ver.0.35.0 を公開しました。
ダウンロードはいつもの場所からどうぞ。

今回もサムネイルを中心に多くの機能追加と不具合修正を行いました。
詳しい更新内容は更新履歴をご覧ください。

2018年2月18日日曜日

GraphEdit と proppage.dll / evrprop.dll の入手方法

DirectShow を利用したプログラムの開発に有用なツールとして GraphEdit があります。
GraphEdit は Windows 7 までの Windows SDK に含まれていたのですが、Windows 8 以降の SDK からは削除されてしまいました。
Microsoft 的には「DirectShow なんか止めて Media Foundation を使え」ということなのでしょうが、未だに多くのプレイヤーやフィルタが DirectShow 向けに開発されているのが現状です。

GraphEdit は Windows 7 の SDK をインストールすれば手に入る訳ですが、GraphEdit のためだけに大きい SDK をインストールしたくはないし、Windows 10 では素直にインストールできなかったりします。
そこで、SDK をインストールせずに必要なファイルだけを取り出す方法をメモとして残します。

2017年1月22日日曜日

PictureFan ver.0.34.1 を公開

PictureFan の ver.0.34.1 を公開しました。
ver.0.34.0 公開以降に見付かった不具合を修正しています。

  • サムネイルのリストのちらつきを抑止した
  • 書庫内のファイルを開こうとした際に内部エラーが起こる不具合を修正
  • 書庫内のファイルがファイル履歴に正常に追加されない不具合を修正
  • ver.0.34.0 で、サムネイルのツリーかリストにフォーカスがある時アクセラレータキーが機能しない不具合を修正
  • ver.0.34.0 で、サムネイルのステータスバーにディスク空き容量が表示されない不具合を修正
  • サムネイルの [ダブルクリック/Enterで実行する機能] に [関連付け実行] を選択しても機能しない不具合を修正
  • サムネイルのキー割り当てを変更した際に、1つのウィンドウ以外メニューの表記が更新されない不具合を修正
  • サムネイルのタブのフォント設定が保存されない不具合を修正
  • サムネイルのタブのフォントを変えてもタブバーの高さが変わらない不具合を修正
  • サムネイルのステータスバーのフォントを変えた時に表示がおかしくなる不具合を修正
  • ver.0.34.0 で、ICC プロファイルの埋め込みができない不具合を修正
  • その他細かい修正

2016年12月25日日曜日

PictureFan ver.0.34.0 を公開

PictureFan の ver.0.34.0 を公開しました。
ダウンロードはいつもの場所からどうぞ。

今回はサムネイルを中心に多くの機能強化を行いました。
詳しい更新内容は更新履歴をご覧ください。

2016年6月5日日曜日

PictureFan ver.0.33.1 を公開

PictureFan の ver.0.33.1 を公開しました。
ダウンロードはこちらから。

更新内容は以下の通りです。

  • 画像の最大表示倍率を1000%から10000%に上げた
  • WIC で追加のコーデックがインストールされている時、サムネイルで表示できるようにした
  • Users.ini で変数として %SettingsDir% と %LocalSettingsDir% を利用できるようにした
  • 各種のパスの設定で環境変数を利用できるようにした
  • サムネイルキャッシュのフォルダ指定に相対パスや環境変数を利用できるようにした
  • TIFF などの Deflate 圧縮/伸長が行えなくなっていた不具合を修正
  • 以前のバージョンのサムネイルキャッシュの読み込みが行えなくなっていた不具合を修正
  • 画像の幅及び高さが数億画素以上ある場合、画像の周囲の影が正常に描画されない不具合を修正

いつのバージョンからかは分かりませんが(0.32.0?)、TIFF などの Deflate 圧縮が扱えなくなっていました。
原因は zlib のビルドに libpng に付属しているプロジェクトを使ったら、そちらで Z_SOLO というオプションが指定されていて、zlib の一部機能が省かれていたことです。
これでビルドされる zlib は、他でも使うというのは考慮されていなかったようです。