syghの新フラグメント置き場

プログラミングTipsやコード断片の保管場所です。お絵描きもときどき載せます。

プログラミングTips

MFC-CLI 相互運用時の注意点‏

(これは2011-05-09に書いた故OCNブログの記事を移植したものです)それなりに規模の大きい MFC プロジェクトなどで、共通言語ランタイムのサポート /clr を追加して .NET ハイブリッド アプリケーションを作るときに、起動時に EETypeLoadException 例外が…

MFCのCFileDialog::SetDefExt()の引数の型について

(これは2010-06-05に書いた故OCNブログの記事を移植したものです) バグの発見、MS Connect への報告と顛末 Visual Studio 2008/2010 の MFC 9.0/10.0 では、CFileDialog::SetDefExt() の引数の型が間違っていて、本来 LPCTSTR (LPCWSTR for UNICODE / LPCS…

Effects10, Effects11の実行時コンパイル

(これは2013-05-11に書いた故OCNブログの記事を移植したものです)以前書いた、「Effects11 for Windowsストア アプリ」の記事とは趣旨が逆行する話ですが、一応参考程度に書き残しておきます。デスクトップ アプリでは実行時コンパイルを使うこともできま…

Effects11 for Windowsストア アプリ

(これは2013-04-13に書いた故OCNブログの記事を加筆修正したものです)今回は旧D3DXライブラリの歴史にちょっとだけ触れるので、前置きが長いです。Windowsストア アプリを開発できるVisual Studio 2012用のDirectX SDK(Windows SDK 8.0)では、これまでDi…

Visual C++ 2010 SP1でのMFC拡張

(これは2011-05-27に書いた故OCNブログの記事を移植したものです)Microsoftが.NETに注力を始めてからずいぶんと影が薄くなったのが、Visual C++向けのWin32 APIラッパー/デスクトップアプリケーションフレームワークであるMFCなんですが、VC 2010になって…

GDI+でアンチエイリアスEMFを作成

(これは2012-09-08に書いた故OCNブログの記事を移植したものです)MFCのCMetaFileDCでWindows拡張メタファイル(EMF)を作成した場合、たとえGdiplus::Graphics::FromHDC()でバインドしたGDI+グラフィックスを使ってそのメタファイルを描画してもアンチエイ…

ショートカットファイル(.lnk)をC#で読込・解析・編集・作成

Windows 8.1用にHDDを移行したとき、昔使っていた古いドライブレターをいくつか廃止して統合したので、参考資料画像群*1のしおりとして残しておいたショートカットファイル(*.lnk)のリンク切れが大量に発生しました(リンク先の実体ファイルは別ドライブの…

OK/Cancelボタンの配置順

WindowsとMacそれぞれの、ユーザー確認ダイアログにおけるOKボタンとキャンセルボタンの位置(順序)の違いに関して、下記に考察が記載されています。 「OK」と「キャンセル」、どちらが有効か - @IT そういえば、JavaのダイアログもMacと同じ順序です(日…

マネージリソースアセンブリの解析

.NETのマネージリソースアセンブリを解析するC#コンソールプログラムのサンプルです(Visual Studio 2012で動作確認)。 非ASCII文字を含む文字列をValueに持つようなエントリー群をXMLファイルに書き出します。なんでこんなことをしようかと思ったかという…

Windows SDKと旧DirectX SDK

DirectX SDKはJune 2010がリリースされた後、まったく新しいバージョンが出ない時期が続いたんですが、Visual Studio 2012にバンドルされているWindows SDK 8.0において、DirectX SDKはWindows SDKと統合されました。 Windows SDK for Windows 8 – Windows a…

MSDNライブラリの記載ミス

以前、「MSDN DirectX SDKヘルプの記載ミス」というタイトルで不平不満をぶちまけた記事を書いたんですが、そのほかのヘルプドキュメント(.NET, MFCなど)にもいくつかの誤記があります。 個人的に特に許せないものに関してはこの場でさらしておきましょう…

WPFのxbapファイルのキャッシュ場所

(これは2010-06-08に書いた故OCNブログの記事を移植したものです)WPFを使用したWebアプリケーション(ブラウザ アプリケーション)を作成・デバッグ・頒布する際に、注意事項があります。WPFを使用したWebアプリケーションの実行ファイル(.xbap)を、Visu…

WPFアプリのローカライズ(OS言語自動一致版)

WPF ローカライズの方法はいくつかあるんですが、今回は英語版をベース(ニュートラル言語)として、日本語にローカライズされた文字列テーブルを追加する手順を説明します。OS の UI 言語設定に合わせてアプリ起動時に自動的に文言をローカライズすることを…

C/C++可変個引数のダークサイド

(これは2010-11-07に書いた故OCNブログの記事を移植したものです)C/C++ の可変引数(可変個引数、可変長引数)はとても強力です。こいつにお世話にならない人はおそらくほとんど居ないと言っても過言ではありません。とくに printf/scanf 系の文字列入出力…

コンテナと値型・ポインタ型

(これは2010-11-14に書いた故OCNブログの記事を移植したものです)STL コンテナ クラス テンプレート(std::vector, std::list など)や MFC/ATL コレクション クラス テンプレート(CArray / CAtlArray, CList / CAtlList)のテンプレート引数に、値型をつ…

Visual Studio正規表現の否定先読み

(これは2010-08-06に書いた故OCNブログの記事を移植したものです)ある文字列を「含まない」行を正規表現(Regex)で検索したいとき、先読み機能が使えるPerlやPython、.NET、ECMAScriptなどでは、下記のようにします。 ^((?!foo).)*$先読み機能がないと、…

Direct2D Effectsで発光する雷をプロシージャル生成する

Windows 8で使えるようになったDirect2D 1.1には、多数の便利な機能が追加されています。ブレンドモード(Composite Mode)の制御のほか、シェーダーを利用したエフェクトが使えるようになりました。 エフェクトは頂点シェーダーで実装されているとおぼしき…

Visual StudioのツールボックスにWin32/MFC向けのコントロール一覧が表示されないとき

これはときどき発生する現象で、Visual Studio 2008など以前のバージョンでも存在していた現象なのですが、今回Windows 8.1にインストールしたVisual Studio 2012/2013両方にて発生しました。 何が原因でこの現象が発生するのかはよく分かっていないんですが…

OpenGLコンピュートシェーダー

(これは2013-01-30に書いた故OCNブログの記事を移植したものです)2013-01-05に公開されたNVIDIAのリテールドライバー310.90で、ようやくOpenGL 4.3が正式に使えるようになりました。最新世代のKeplerのほか、旧世代のFermiアーキテクチャのグラフィックス…

size_t, ptrdiff_tのprintf書式指定

(これは2010-12-05に書いた故OCNブログの記事を移植したものです)size_tとptrdiff_tはポインタ同様、32bit向け(_M_IX86とか)と64bit向け(_M_X64とか)でサイズと上下限が変わるプラットフォーム依存の整数型なので、printf()系の関数で出力する場合、書…

MSDN DirectX SDKヘルプの記載ミス

(これは2011-02-12に書いた、故OCNブログの記事を移植したものです)D3DX10 のヘッダーを調べればすぐに分かることなんですが、下記の ID3DX10Mesh::Optimize() メソッドに関して、2011-02-12 現在、MSDN のヘルプが間違っているので備忘録として残しておき…

PowerShellで特定の拡張子のファイルを再帰的に削除

(これは2011-02-12に書いた故OCNブログの記事を移植したものです)特定の拡張子(例えば.dat)のファイルを、下位のフォルダ内のファイルを含めて再帰的に削除したいとき、コマンド プロンプトでは del *.dat /sとすればいいんですが、問答無用で即コマンド…

C++正規表現ライブラリ(Regex)でCSV解析

(これは2011-01-30に書いた故OCNブログの記事を移植したものです)C++11 (C++0x TR1) には正規表現ライブラリとして <regex> が存在するんですが、こいつを使って簡単なCSV文字列解析処理を書いてみました。参考にしたのは下記。 CSV形式のファイルをDataTableや配</regex>…

HLSL warningの3000番台はdisableできない?

(これは2011-01-10に書いた故OCNブログの記事を移植したものです)例えばこういうHLSLコード(Direct3D 9, XNA)をコンパイルすると、X3550の警告が出ます。 // 指定したインデックスのボーン行列をテクスチャからフェッチする。 void VTFBoneMatrix(out fl…

Visual C++ 2010以降の追加ディレクトリ

(これは2010-05-04に書いた故OCNブログの記事を加筆修正したものです)2015-12-03追記: Visual C++ 2015にも言及するように修正しました。VC++ 2008までは、「ツール」→「オプション」→「プロジェクトおよびソリューション」→「VC++ディレクトリ」で設定で…

shared_ptrとconst

(これは2011-01-17に書いた故OCNブログの記事を加筆修正したものです)あんまり言及してる人がいないんですが、これはshared_ptrとconstを組み合わせて使う上でとても重要な機能です。普通組込のconstポインタあるいはconst参照経由では、const操作しかでき…

C++のmutableの使い道

(これは2010-10-20に書いた故OCNブログの記事を加筆修正したものです)C++のmutableはconstメソッド内でも変更可能なフィールドを定義する場合などに使います。mutableはヘタに使うと混乱を招くだけの余計な機能なんですが、こんな感じでスレッドセーフなク…

VC++ 2010以降のstd::set::iterator

(これは2011-02-13に書いた故OCNブログの記事を加筆修正したものです)C++11 (C++0x) 対応関連でSTLのstd::set::iteratorの仕様が変わって、VC++ 2010以降ではstd::set::const_iteratorと同じ型になっています。MS Connectへの報告はすでに存在しますが、こ…

GLSLが使いにくい件について

(これは2011-09-20に書いた故OCNブログの記事を加筆修正したものです)個人的にグラフィックス プログラミングが好きで、仕事でも趣味でもDirectXやOpenGLを使っているんですが、OpenGL/OpenGL ESの不甲斐なさにそろそろ愛想が尽きてきました。 具体的にDir…

コンピュートシェーダーの性能

(これは2011-10-08に書いた故OCNブログの記事を加筆修正したものです)DirectX 9世代のシェーダーモデル3.0までは、画面座標系でのポスト エフェクト処理(たとえばガウスぼかしやブルーム、トーン マッピング、SSAOなど)はレンダーターゲットを切り替えて…