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

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

プログラミングTips

C# 6.0コンパイラーの興味深い挙動

C#言語はnullに関連する演算子が豊富です。 null合体演算子 null合体演算子は左側オペランドがnullでない場合は左側オペランドを返し、nullの場合は右側オペランドを返します。参照型のほか、Null許容型(Nullable)にも適用可能です。C# 2.0で追加されまし…

Photoshopのレイヤー数をスクリプトで数える

本業の仕事が忙しかったこともあり、前回の記事から1年近く何も書けませんでした。すでにはてな記法を忘れつつありますが、ぼちぼち頑張ります。Photoshop内部では、レイヤーを"art layer"、グループ(フォルダーアイコン)を"layer set"と呼んでいます。 今…

Vulkan SDK付属のGLSLコンパイラー

2016年2月にVulkanの正式仕様とSDKがリリースされ、その後NVIDIAやAMDなど大手GPUベンダー各社からもPC向け正式ドライバーがリリースされ始めているので、そろそろ試してみることにしました。まずはシェーダーのコンパイラーまわりから入ります。ちなみにVul…

INIファイルでUnicodeを扱う

今更ですが今日はINIファイルのお話です。初めに断っておきますが、ぶっちゃけWindowsアプリケーションでレガシーなINIファイルを使うのはもうやめましょう。Windowsアプリケーション設定の管理には、今後はレジストリやXMLファイルなどを使うべきです。 そ…

自作MetasequoiaプラグインをGitHubで公開しました

かつて2007年~2008年頃、こっそり自分のためだけに開発したMetasequoiaプラグインのソースコードがHDDの肥やしになっていたので、Gitの練習も兼ねてGitHubに移管・オープンソース化しました。ライセンスはMITです。 GitHub - sygh-JP/SyghMQPlugins: Metase…

Visual Studio 2015とD3DCompiler

Visual Studio 2015でビルドした、DirectX 11.1を使ったMFC/WPF混合アプリをWindows 7のエクスプローラーから起動すると、起動直後に勝手に終了する現象が出ました*1。 しかし、終了時にWindowsからクラッシュエラーのタスクダイアログも表示されないし、イ…

XAudio2とMedia FoundationでMP3/WMA再生

経緯 以前、DirectXの学習を兼ねて開発していたゲームエンジン(C++で様々なDirectX APIを直接叩いていました)では、効果音 (SE) の再生にXACT3を、BGMの再生にDirectShowを使っていました。本当はBGMにもXACT3を使ってもよかったのですが、MP3/WMAフォーマ…

Direct3D 12 (DirectX 12) の簡単なサンプル

(本記事の内容は執筆時点の暫定仕様に基づくものです。実際の最終製品版とは異なる可能性があります)GDCの開催された2015年3月にはすでにDirect3D 12 (DirectX 12) の暫定ドキュメントとVisual Studio 2015 CTPが公開されていたのですが、肝心の実行環境で…

NVIDIAのOpenCL対応状況

NVIDIAのOpenCLドライバーはIntelやAMDと比べて規格への対応が遅く、2015年2月時点でもOpenCL 1.1どまりです。NVIDIAのOpenCL SDKとなるCUDA Toolkitも、7.0時点でOpenCL 1.1までしか対応していません(cl.hに定義されているのはCL_VERSION_1_1まで)。例え…

F#でファイル・フォルダーをごみ箱へ移動

Visual Studioのバージョン2010以降をインストールすると、拡張子.fsxにVisual Studioが関連付けられ*1、さらにコンテキストメニューに「Run with F# interactive...」というコマンドが追加されます。.fsxはF#スクリプトと呼ばれるファイルなのですが、Visua…

VS 2008のWPF-MFC相互運用

(これは2011-03-18に書いた故OCNブログの記事を移植したものです)以下を参考に、MFC アプリから WPF を使おうとして、Visual Studio 2008 SP1 のバグに遭遇しました。 WPF ユーザー コントロールを HwndSource 経由でホストする Win32 アプリ……といいつつ…

CButtonとCMFCButtonの比較

(これは2010-06-20に書いた故OCNブログの記事を移植したものです)Visual Studio 2008 SP1にて導入された、MFC Feature Pack付属のCMFCButtonは、従来のCButtonに比べてかなり強力です。微妙に使い勝手が違う部分もありますが、ボタンの文字色変更とか、画…

CScrollViewの代わりにCViewでスクロール

(これは2010-09-07に書いた故OCNブログの記事を移植したものです)MFCのCScrollViewは便利なんですが、画像編集ソフトのようなものを作ろうとしたとき、いかんせん細かい制御がしづらいというか、CScrollView::SetScrollSizes()などのユーティリティ メンバ…

ATL::CPathユーティリティ

(これは2010-10-31に書いた故OCNブログの記事を移植したものです)Visual C++ 付属の ATL にはわりと便利なユーティリティ クラスがあるんですが、あまり知られてないのでひとつ紹介します。ATL::CPathこいつは Windows Shell API の Path*関数を薄くラップ…

WinSDKおよびATLのCOMユーティリティ

(これは2010-11-23に書いた故OCNブログの記事を移植したものです)MSXMLなどのCOMタイプ ライブラリを#importしたときなど、COMを扱うときによく見かけるのが、Visual C++ CRTヘルパーの _bstr_t クラスと _variant_t クラス(comutil.h)です。それぞれ、C…

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 言語設定に合わせてアプリ起動時に自動的に文言をローカライズすることを…

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

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

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

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