.NETFrameworkからWindow APIで文字列扱うとき

文字列を扱うWindows API関数の使い方

ミキサーデバイス情報を得るために、MIXERCAPSのポインタをWindowsAPIに渡す必要がある。
で、ミキサー名はC#で言うところのstring型なわけで、何も考えずに構造体こさえてmixerGetDevCaps()に渡すとメモリ不正書き込みで怒られた。

よくわかってないけど、文字列宣言の前に

[MarshalAs(UnmanagedType.ByValTStr,SizeConst=256)]

って入れるといいらしい。
とりあえず、デバッグレベルで動作確認完了。

Blogged with Flock