2016年10月31日月曜日

FindFirstFile にルートパスを指定した場合の挙動について

FindFirstFile(FindFirstFileEx) 関数の lpFileName にルートパスは指定できません。
MSDN でそのように記載されています。
FindFirstFile 関数
FindFirstFile の lpFileName パラメータでは、最後に円記号(\)を付けるかどうかにかかわりなく、ルートディレクトリを指定することはできません。




指定できないのはわかりましたが、実際に指定してしまった場合にどうなるのか検証したところ、厄介な挙動だったので備忘録として残しておきます。

検証にしようしたコードはこちら。



これを実行するとこのような出力になります。

カレントディレクトリがルートパスでない場合

このように INVALID_HANDLE ではなく Find が成功し、しかもなぜかカレントディレクトリ名が取得できます。


これが、カレントディレクトリがルートパスだった場合

期待?通り INVALID_HANDLE が返ります。


ちなみに、FindFirstFileExTest がコメントアウトされていますが、FindFirstFileEx でも同じ挙動を示しました。
(Windows 10 HOME version 1607 build 14393.321)
古い OS での検証はできていないので、もしかしたら挙動が異なるかもしれません。

2016年10月26日水曜日

[Cppcheck] 結果を CSV で出力してエクセルで確認する

なぜそんなことが必要か?
Jenkins で xml を集計している場合は、視覚的に確認ができます。
Visual Studio などから利用した場合も、--template vs で出力ウィンドウからジャンプできますし、拡張機能もあります。
これらの組み合わせを使っている場合は、まったくもって問題ないのですが、スタンドアロンで解析して結果を確認したい場合に、視覚的に確認できる方法が欲しかったので、表題にあるような対応をしました。

方法

出力ログフォーマットを以下のように指定します。
--template={file},{line},{severity},{id},\"{message}\"

あとは、stderr を .csv にリダイレクトすれば OK
(message にたまに "" が含まれている場合があるので、そこだけセルが別れちゃいますが…)


実際にこの方法で確認してみると結構便利だということがわかりました。
ぜひ一度お試しあれ


2016年10月17日月曜日

Bitbucket などから「SourceTree にクローン」をしても SourceTree が起動しない場合にすること

Bitbucket の WEB ページなどからクローンしたりするアレ。


これが無反応だったり、ストアアプリを検索させられたり、うまく動作してなかったので調べました。



そもそもどういう仕組み?
なんか便利な機能程度にしか認識してなかったのですが、ちゃんと調べるとそんなのできたんだーと勉強になりました。
これは、URI Association というものだそうです。
ストアアプリとやり取りしたりするのに使ったりもするようです。

SourceTree のオプションから設定
さて、本題です。
SourceTree の URI Association がなぜか無効になっていることがわかったので(インストール時に設定されないのかな?)、オプションから設定してあげます。

「ツール」>「オプション」を開き、「全般」の上のほうにある「Use this version of SourceTree for URI association」にチェックをいれます。

これで完了です。

おまけ
URI Association はレジストリの HKEY_CLASS_ROOT に以下のような構成で記録されます。