VS2010でC/C++プロジェクトを開いて、プロジェクトオプションでC/C++のコード分析を有効化するわけよ。
#ただし、上位版じゃないと無理ね。
この分析が結構有効なんですよ。
何かとお世話になってるわけですけどね。
けどね、実はチェックの法則というか、分析で弾かれないコードってのがあることに気付いちゃったのですよね。
VS2010でC/C++プロジェクトを開いて、プロジェクトオプションでC/C++のコード分析を有効化するわけよ。
#ただし、上位版じゃないと無理ね。
この分析が結構有効なんですよ。
何かとお世話になってるわけですけどね。
けどね、実はチェックの法則というか、分析で弾かれないコードってのがあることに気付いちゃったのですよね。
意外に知られていないようなので。
VisualStudio 2010は対応している。
VisualStudio 2008は対応していたはず。
VisualStudio 2005以前は不明。
ツールボックスって、ビジュアル開発するときには、パーツを選択してペタペタ貼り付けるのに使うんだけど、他にもつかいみちがある。
テキストを保存しておけるのだ。
コード書いててコピペしたいときとか、定型の文字列などがある場合、その文字列を選択して、ツールボックスにポイッとドラッグ&ドロップ。
必要ヶ所にツールボックスからドラッグ&ドロップ。
似たような処理を複数書かなければならないテストプログラムなどには重宝する機能だと思う。
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用にコードを書いて、ビルドすれば、適当にマルチスレッド化してくれる。
知らんかったんで、インストール失敗とはなにごとかと、システムを疑うことしばし。
http://support.microsoft.com/kb/983509/ja
公式サポートによると、「Visual Studio 2010 SP1 には、Microsoft Silverlight 4 Tools for Visual Studio 2010 が内蔵されています。」だそうな。
何度インストールしてもVisual Studioがありませんって文句言われちまう事態には参った。
「インストール済み」ですとかにはならんのだろうか・・・
XXXoverSMTPを考えてみる。
即応性を必要としなければ、たとえばHTTPoverSMTPとかなら十分いける気がする。
非同期応答可能な専用プロキシサービスとして実装すれば、普通のブラウザも使えるんじゃないかと。
いや、APIフックか。
ブラウザプロセスのWinsockをフックして、特定リクエストパケットをSMTPに載せるのがいいのかも。
もちろん、SMTP内容はメール本文レベルで暗号化すると。
いや、クライアント側は何とかなっても、SMTPトンネルの向こう側でサーバとの通信をする側は即応性を必要とする(たとえば、セッションタイムアウトの設定があるとか)ものがあるかも知れないし、やはりダメか。
めちゃ高い、めっさ高価。
MSDNの更新時期になったのは仕方ないのだが、今までDeveloper Editionだったのが、体系変更でUltimateになったので、どうせなら更新もUltimateにしちゃおうと、考えるのは普通だろう・・・か?
考えただけじゃ更新できないので、いつも発注してるインプレスダイレクトで見積もってみる。
Visual Studio Ultimate w/MSDN All Languages Software Assurance Open Businessで税込684,201円だと!?
マジですか!!
・・・と悩みまくったのが1月末。
2月になって、そろそろ決断しなければと、再度見ると、年度末特別ディスカウントで少し安くなってたので、仕方なく、発注を決断。
#もう、破産覚悟だ<そんなことはありません、だがしかし、だがしかし!!!
カードの限度額大丈夫か心配<これ大切、マジ重要。
他にも使用予定ある現在、残高含めて、かなりのスリル。
#借金しない、リボも使わない、これ大前提。
車とか家とか買うこと考えたら大したこと無いと思うかも知れないが、これが2年毎発生することを考えると、もうダメ<想定の範囲外。
#Azureもタダで使えるらしいから、使わなきゃ損かもなぁ・・・<遠い眼。
先はなげぇ、長過ぎる。
.xllからトレイアイコンを登録したあと、マウスボタンアップイベントを取得するまではできたけど、メニューを表示するのは結構難しい。
いや、表示だけなら、メニューリソースをひっぱってくればいいんだけど、更にメニューのイベントを取得できないと意味無いじゃん。
その意味あることってーのを実現しようと・・・どうすりゃいいんだって話。
メッセージループで処理するのは分かってるけど、トレイアイコン表示の為だけにそれごとライブラリ化しちゃったからなぁ・・・
また設計見直ししなきゃならんかなぁ。
それとも、メニュー用に別途ウィンドウハンドル用意した方がいいのかしら。
どうすっかな・・・
理由は分からない。
デバッグビルドでデバッグ実行し、ブレークポイントを設定して、そのときのクラスメンバの値を見るとかは、普通の手段だと思うのだが、なぜかはわからないけれど、あるメンバ変数の中身が???で見ることができない。
問題のメンバ変数はDLLVERSIONINFO型なのだが、なぜ???になってしまうのか、さっぱりだ。
同じクラスの他のメンバ変数は、ちゃんと値を見ることできてるのに・・・
DLLだろうがなんだろうが、ちゃんとしたコードを書けば、ちゃんと動く。
とりあえず、.xllからタスクトレイアイコン(通知アイコン)の登録に成功した。
メニューやバルーンはまだ無い。
バルーンに関してはレジストリ依存で非表示にできちゃうらしいから、非対応。
メニューは表示させたいところ。
#クリックでウィンドウ開いてもいいけど、メニューだけでもON/OFF選択くらいは可能だからなぁ。
こういうの、やっぱりMFC使ったほうが楽できるんだろうけど。
#今のところ、非MFC。