kkamegawa's weblog

Visual Studio,TFS,ALM,VSTS,DevOps関係のことについていろいろと書いていきます。Google Analyticsで解析を行っています

C++

Visual Studio .NET 2003のプロジェクトをアップグレードして64bit版にするときはまること

私ははまってしまいました。Visual Studio .NET 2003とVisual Studio…たぶん2005以降、ソリューションファイルのマクロ定義(($OutDir)などのあれ)が相対パスから絶対パスに代わっているんですね。 たとえば、Visual Studio .NET 2003のソリューションファイ…

msvcrtをどのくらい使うか?

以前はShell Lightweight Functionの便利関数とかなかったので、自分たちでいろいろ作っていたと思います。文字操作系などはstrtokとかでいろいろやっていた人も多いでしょうし、strlenとかいまだに使っているコードよく見かけます。 最近はまずShell Lightw…

MOUSE_HWHEELED はVista以降

MOUSE_EVENT_RECORD structure (Windows) ではMOUSE_HWHEELEDイベント(コンソールでのマウスホイールの水平動作イベント)はWindows 2000以降みたいなことを書いていますが、実際WinCon.hを見るとこうなっています。 #define MOUSE_MOVED 0x0001 #define DOUB…

先月のVisual Studio hotfix

KB2295689FIX: Visual Studio 2010 does not build some Visual C++ projects or does not display the "Properties" page correctly when the "_BuildArch" or "_BuildType" environment variable is set on the computer _BuildArchもしくは_BuildTypeとい…

その機能を提供しているAPIがきっとあるよ

Win32APIで、10240 → "10K" みたいに補助単位付き文字列に変換してくれるのがあったような気がするんだけど、名前もわからないし効率的なググり方もわからない。Shell APIだったっけ。誰か知ってたら教えてください!2010-10-12 18:44:48 via webというつぶ…

じゃあ、CompareStringExでFullwidthの10と2はどう判定される?

昨日のWindows 7で文字列比較すると2は10よりも小さくできるよ - 新日々此何有哉を書いた後、「ASCIIは大丈夫。じゃあFullWidth(いわゆる全角)の10と2では」と思ってやってみました。 #define WINVER 0x602 #include <windows.h> #include <locale.h> LPCTSTR lpszCSTR[4] = {_</locale.h></windows.h>…

Windows 7で文字列比較すると2は10よりも小さくできるよ

文字列で2と10を比較すると、10のほうが小さいと判定されます。リストボックスなどにこんな風に出るといわれたことありませんか? 1 10 2 こんな感じ。lstrcmpやCompareStringといったAPIでは先頭の文字で判断しちゃうからこうなるんでしょうね。で、あまり…

Windows 7で高速にファイルを列挙させるFindFirstFileEx

長い間、NTFSチューニングの一つに「短いファイル名を生成させない」という技がありました。Windows Server 2008 R2のベストプラクティスアナライザーでも遅いディスクに対してはこのアドバイスが下されます。 NTFS Performance with Numerous Long Filename…

PathRemoveFileSpecAに0x5cを含むパスを渡した時の挙動

PathRemoveFileSpec function (Windows) Shell Lightweight Utility FunctionのうちのPath系のFunctionは便利で私もよく使っています。PathRemoveFileSpecのANSI版が特定のOSでバグっているという話を聞いたので、試してみました。 #include <stdio.h> #include <windows.h> #inc</windows.h></stdio.h>…

X64 Windows Debugging: Practical Foundationsが届いた

[id:kkamegawa:20100522:p1]で紹介した本が今日届きました。いや、聞いてはいたけどほんとに薄い本です。読むためにはWinDbgと基本的なアセンブラの知識は必要で、そのうえでx64では何が違うのかということを紹介しています。X64 Windows Debugging: Practic…

VS2003からのC++プロジェクトアップグレードするとLNK1117エラーが出る場合の対処

Visual Studio .NET 2003のC++プロジェクトからVisual Studio 2008のC++プロジェクトにアップグレードしました。するとWin32 Debugで生成するとこんなエラーが。 LNK:1117オプション '/MAP:LINEINFO' に構文エラーがあります。 どうやら/MAP:LINEINFOは削除…

Express Editionにみるデバッガ機能の違い

ブレークポイントとトレースポイントの使用 なぜかC++のExpress Editionだけデバッガの高度な機能(フィルタとかヒットカウント)が使えるんですね。Visual Studio 2005からの伝統のようで。うーむ、C#とかVB,Web Developerでもあっていいじゃないとか思うんで…

同時実行ランタイムの翻訳

.NET Frameworkのパラレルライブラリだけで、ネイティブコードのConcurrency Runtimeは翻訳されないだろうと思ったら、ちゃんと人間の翻訳が入っていたんですね。すばらしい。 同時実行ランタイム 並列ランタイムの「タスク スケジューラー」も間違いではな…

IsOS

IsOS function (Windows) つらつらとShell Lightweight Functionsを見ていたらなんだこれってAPI。これWindows Server 2003まででしか使えない(Vista/7ではサポート外)っていうAPIですね。今ではちゃんとVerifyVersionInfoを使いましょうってことになってい…

それ違うから

今までメンテナンスしていたプログラムの64bit化をやってます。そうすると問題がちょこちょこ出てきます。これは今まで隠れていた類の問題のはず。 long foo(LPTSTR arg1, LPTSTR arg2) { TCHAR a[129]; TCHAR b[129]; (略) RegOpenKey(略); QueryValueEx(略…

x64クロス生成環境

知ってるひとがそばにいると心強い これ見て思い出したんだけれども、やはり「クロス開発環境」を提供するのはめんどいのかなぁと思った。会社の開発環境で「生成したきゃ64bit環境用意しろ」というものがあって、びっくりしたのですよ。 今はHyper-Vで楽に6…

Visual Studio 2008 SP1インストール後に必要なプログラム

ダウンロードセンターにはちょいちょい出ていますが、どうしても入れなくてはいけないもの以外にも割とあります。基本的にはあてたほうがいいのですが、結構多いですね…。 サポート技術情報からダウンロード可能なパッチ一覧。 Visual Studio - マイクロソフ…

Visual Studio 2010でコードバイトを表示するには

Visual Studio 2010ではC/C++のデバッグ時でも逆アセンブルは表示されますが、コードバイトは表示されなくなったようです。 昨日のcodeseek勉強会で「これが見えなくなって大変不便だ」という話がありましたが、デフォルトで見えなくなっただけで、ちゃんと…

imepad.h

Download Office Sample: Input Method Editor (IME) Header File: imepad.h from Official Microsoft Download Center Office IME 14(Office IME 2010)リリースに伴い、恒例のSDKに入りそうで入らないヘッダがダウンロードセンタに登場。誰が使うのかは置い…

無理だろうけど、C++/CLIの自動マーシャリングの強化について

[id:kkamegawa:20091202:p1]にegtraさんからコメントいただきました。ありがとうございます。 そのhHandleへのポインタを渡したければ、Class1::Test内で、pin_ptr phHandle = &hHandle;と、確かpin_ptrに入れればHANDLE*を引数に取るOpenPrinterに渡せるよ…

C++/CLIの相互運用と宣言場所

プリンタ関係で定型外用紙を追加する機能をC++/CLIでちょっと作ってみました。P/Invoke書くのがめんどいので、C++/CLIで書いてみるとちょっと謎。仕様を読んでみたつもりなのですが、うーむ…。windows.hはstdafx.hでインクルードしています。 //ヘッダファイ…

Common Log File System(CLFS)で書いてみる。

昨日に引き続き、CLFS。少し試行錯誤してわかってきました。今日やったのはログを追記するあたり。 Appending Records to a Log (Windows) CreateLogFileで領域を作り、ポリシーを設定する(自動拡張ポリシーはWindows Server 2003 R2ではうまく動かないみた…

Common Log File System(CLFS)

ログ書き込みのパフォーマンスをあげるべく、Common Log File System(以下CLFS)とEvent Tracing(ETW)を検討しています。まずはCLFS…見事に日本語ないですね。System.IO.Logの説明見たほうがいい…とまではいきませんが。 Visual Studio 2008 SP1に付属してい…

Desktop Heapの値を取得する

Windowsではデスクトップヒープというものがあります。メニューやアイコン、ウィンドウを作られるたびにここから取られます。なくなるとプロセスの起動に失敗します。 Desktop Heap Overview - Ntdebugging Blog - Site Home - MSDN Blogs Windows Server 20…

プロセス数を簡単に取得する。

ウィンドウであればEnumWindows、フォントであればEnumFontFamiliesexなんてのがあって、これにコールバック関数を渡しておけば、どんどん取得できるのですが…プロセス一覧だと、EnumProcessでは、そういう気のきいたことないですね…。psapi.dllだからなんで…

GetTempFileNameが基準とする時間

GetTempFileName 関数 このAPIの第三引数は一意な値をシステム時刻から取得して、実際にファイルを作成するとあります。 0 を指定すると、この関数は、lpPrefixString パラメータで指定した接頭辞に、システム時刻に基づいて生成された 16 進文字列を連結し…

pingが違うIPアドレスに送信される

192.168.1.080ではだめで、192.168.1.80では送信されます。Vistaでみてみると、192.168.1.57に送ろうとしています。少なくともVistaの場合、0をつけてしまうと8進数だと誤解されてしまうわけですね。Windows 7ではそのまま8進数で送るなんてことはせず、ちょ…

MS09-035で再生成が必要なこと

私のCOMの知識はいい加減なので、信用しないようにしましょう…とお約束のことを書いといて。 404 - ファイルまたはディレクトリが見つかりません。 警告扱いですが、ATLでActive Xを提供した人のうち、条件に該当するバイナリを提供している人はMS09-035とMS…

Windows 7 コミュニティ勉強会 with Tech Fielders 東京編資料公開

Windows 7コミュニティ勉強会 with Tech Filders(こみゅぷらすCLT)に参加されたみなさまありがとうございました。スタッフの皆様もお疲れ様でした。当日私が使った資料から一部突っ込みをいただいたところを修正して公開しています。 VS2010並列実行ランタイ…

見掛け上ロックがないのに、マルチスレッドのほうが遅い?

お久しぶりでございます。土曜日のイベントのために余裕がありません。最初のセッションだと思っていたけど、実は違っていることが分かって、「よっしゃ、小高さんのセッション中資料作れる」と安心している悪いやつです。 さて、昨日ちょっとマルチスレッド…