鷲ノ巣

C# とか PowerShell とか。当ブログの記事は(特に公開直後は)頻繁に改定される場合があることをご了承ください。

async/await と SynchronizationContext (1)

前回の記事に続き、非同期処理シリーズの第 2 弾。
今回は SynchronizationContext について。

SynchronizationContext は、.NET Framework 2.0 から登場したクラスです。「同期コンテキスト」と訳される場合もあります。
これが何かと言うと、誤解を恐れずに大雑把に言えば、「スレッドをまたがる際の問題をいい感じに処理してくれるクラス」です。
いやまぁ、ふわっとしすぎているのは分かっているんですが、実際にどういう処理をするかは派生クラスによるので、こういう言い方しかできないんです。

続きを読む

ASP.NET 5 で Azure API App

ASP.NET 5 はまだプレビュー、Azure API App もプレビューなので、Visual Studio にはそれらを組み合わせたプロジェクト テンプレートが用意されていません。
今回、いくつかのエラーに阻まれながらも、試行錯誤して、なんとか動かすことができたので、手順を報告したいと思います。
ただ ASP.NET 5 の Web API を動かすだけであれば、普通に Azure API App にデプロイすれば一応動くのですが、API App としてはいくつかのお約束事がありますので、その辺りを中心に解説します。*1

なお、開発環境は、Visual Studio 2015 上に ASP.NET 5 Beta7 の開発環境を整えた状態になっています。
とりあえず最新の ASP.NET 開発ツールはインストールしておいてください。

*1:ASP.NET Web API そのものについては割愛します。

続きを読む

【保存版】構造体のマーシャリングのまとめ

P/InvokeWindows API を呼び出す際、引数に構造体を渡すには、割と色々な方法があります。
最近ちょっと混乱したので、改めてまとめてみました。
これまで知らなかった便利な方法も紹介しています。
新機能でも何でもありませんが、よく P/Invoke を使われる方にはご一読頂いて損はない内容だと思います。

ちなみに、本記事では、C# で言う struct と class を総称して「構造体」と呼ぶこととします。
struct と class の区別が必要な場合は「struct」と「class」または「値型」と「参照型」と呼び分けます。
本文中では「struct ≠ 構造体」ということにご留意ください。

なお、本記事の内容は、Windows API の呼び出しに限定した内容になっています。
COM の場合はまた事情が違うのですが、そちらは割愛させて頂きます。

続きを読む

Code Contracts on VS2015

我が家のマシンにも、やっと Windows 10 と VS2015 を入れることができました。
Windows 10 のアップグレード予約はしていたのですが、リカバリーして綺麗にしてからアップグレードしようと思ったら、リカバリーすると予約は引き継げないんですね。
というわけで ISO から入れたのでした。

VS も思い切って 2015 一本にしました。
エクステンションも一から入れ直しです。
使いもしないエクステンションをたくさんインストールするのが趣味なので、実に胸躍る作業ですね。

そんなわけで、今回は VS2015 にも対応した Code Contracts のお話です。

続きを読む