VS2010でC/C++プロジェクトを開いて、プロジェクトオプションでC/C++のコード分析を有効化するわけよ。
#ただし、上位版じゃないと無理ね。
この分析が結構有効なんですよ。
何かとお世話になってるわけですけどね。
けどね、実はチェックの法則というか、分析で弾かれないコードってのがあることに気付いちゃったのですよね。
VS2010でC/C++プロジェクトを開いて、プロジェクトオプションでC/C++のコード分析を有効化するわけよ。
#ただし、上位版じゃないと無理ね。
この分析が結構有効なんですよ。
何かとお世話になってるわけですけどね。
けどね、実はチェックの法則というか、分析で弾かれないコードってのがあることに気付いちゃったのですよね。
VisualStudioにはコメントタスク(TODO:)とかの収集をしてくれる機能があるわけだが、これが、C/C++だとデフォで働かないっぽい。
C/C++用テキストエディタでコメント収集をチェックする必要がある。
しかも、カレントのファイルにしか働かない点にも要チェック。
おまけに、2重・3重に収集する荒業によって、数件のコメントが数倍カウントされるお茶目っぷり。
ただ、これ使うとかなり便利なので、チェックは入れておきたい。
VC++2010なら、parallel_forなんかを使えばいい。
さもなくば、自分でスレッド作ってもいい。
でも、VC++2005(VC++8)以降ではOpenMPをサポートしてるらしいので、使ってみた。
ただし、Standard以下では標準ではOpenMPサポートされていないので、何らかの対策が必要。
とはいえ、SDKとかインストールすればよいだけのことなのだが。
今回は、VS2008Proをインストールして、それに含まれるOpenMPライブラリを使ってみることにした。
設定は簡単。
標準のインクルードディレクトリ設定にVC++2008(VC++9)のincludeディレクトリを追加して、プロジェクトにライブラリを設定し、あとは、コンパイラコマンドラインに/openmpを追加すればOK。
あとは、Open MP用にコードを書いて、ビルドすれば、適当にマルチスレッド化してくれる。
先はなげぇ、長過ぎる。
.xllからトレイアイコンを登録したあと、マウスボタンアップイベントを取得するまではできたけど、メニューを表示するのは結構難しい。
いや、表示だけなら、メニューリソースをひっぱってくればいいんだけど、更にメニューのイベントを取得できないと意味無いじゃん。
その意味あることってーのを実現しようと・・・どうすりゃいいんだって話。
メッセージループで処理するのは分かってるけど、トレイアイコン表示の為だけにそれごとライブラリ化しちゃったからなぁ・・・
また設計見直ししなきゃならんかなぁ。
それとも、メニュー用に別途ウィンドウハンドル用意した方がいいのかしら。
どうすっかな・・・
理由は分からない。
デバッグビルドでデバッグ実行し、ブレークポイントを設定して、そのときのクラスメンバの値を見るとかは、普通の手段だと思うのだが、なぜかはわからないけれど、あるメンバ変数の中身が???で見ることができない。
問題のメンバ変数はDLLVERSIONINFO型なのだが、なぜ???になってしまうのか、さっぱりだ。
同じクラスの他のメンバ変数は、ちゃんと値を見ることできてるのに・・・
DLLだろうがなんだろうが、ちゃんとしたコードを書けば、ちゃんと動く。
とりあえず、.xllからタスクトレイアイコン(通知アイコン)の登録に成功した。
メニューやバルーンはまだ無い。
バルーンに関してはレジストリ依存で非表示にできちゃうらしいから、非対応。
メニューは表示させたいところ。
#クリックでウィンドウ開いてもいいけど、メニューだけでもON/OFF選択くらいは可能だからなぁ。
こういうの、やっぱりMFC使ったほうが楽できるんだろうけど。
#今のところ、非MFC。
書いとかないと、忘れる。
本当はパケット内容をごにょごにょいじりまくるアプリケーションを考えるべきとは思うのだが、それでなにを実現するかについては全く思い浮かばない・・・というか、実現したいことはあるんだけどさ、使い方がね・・・
XPだとトレイアイコンの識別にID(数値)管理しかなく、メモにした方法では、ExcelのWndProcをフックしても、何かのコントロールとID重複する危険性が無いとは言えずということで悩んでいた。
よくあるパターン。
Excelアドインのセキュリティ問題は大体解決(残すはxll本体をどうするか<でかい!)したんで、まぁいい。
で、通知アイコンを実装しようと思ったら、C/C++(非MFC)の場合、今まで適当に済ませてきたことが一気に襲ってくるわけ。
parallel_forなんてものを知る。
すげぇじゃん、これ!
って思って、Addin for Excelの利用者定義定数関数の登録に使ってるfor文をparallel_forに変えてみた。
8192関数の登録時間を短縮してやろうという腹積もりですよ。