2009/01/12(月).NET から mixer だぁ?
題名の通り。あんまり突っ込んでやるつもりはなかったものの
#pragma once
using namespace System;
namespace SndVol32 {
public ref class Mixer
{
HMIXER hmx;
public:
static int GetNumDevs() { return (int)mixerGetNumDevs(); }
static array<String^> ^ GetDevices()
{
array<String^>^ devices = gcnew array<String^>(GetNumDevs());
for(int i=0; i<devices->Length; i++)
{
MIXERCAPS c = { 0 };
mixerGetDevCaps( (UINT_PTR)i,&c, sizeof(MIXERCAPS));
devices[i] = gcnew String(c.szPname);
}
return devices;
}
Mixer(int uDevID)
{
MMRESULT r;
r = mixerOpen(&hmx, (UINT) uDevID, 0, 0, 0);
if(r != MMSYSERR_NOERROR)
throw gcnew Exception("Error" + r.ToString());
}
};
}
まで書いてビルドしたら、
エラー 1 error C2664: 'mixerOpen' : 1 番目の引数を 'cli::interior_ptr<Type>' から 'LPHMIXER' に変換できません。(新しい機能 ; ヘルプを参照) e:\\my documents\\visual studio 2008\\projects\\sndvol32\\sndvol32.h 29 sndvol32
挫折しました。
構造体やAPIのポーティングがめんどいと思って、C++/CLIとか使うと、
理解を超えるエラーメッセージが出て、余計めんどい罠。
でも、.NETがなければ私はもうプログラムが書けない。
なんという.NET依存症。
すっかりMicrosoftの思うつぼなのかもしれない。