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の思うつぼなのかもしれない。