mixerXXX
Win32 のAPI 関数をラップする小さな OOP/RAII ライブラリを開発しています。
私はMIXERLINE
構造をカプセル化するクラスを書いているので、私のMixerLine
クラスはこれをヘッダーとして持っています:
#pragma once
#define UNICODE
#include <stdio.h>
#include <string>
#include <windows.h>
#include "MixerDevice.h"
//////////////////////////////
class MixerLine {
private:
MIXERLINE _mixerLine;
public:
MixerLine(MixerDevice& parentMixer, DWORD destinationIndex);
~MixerLine();
};
ただし、構文エラーが発生します(VC9で):
エラー 2 エラー C2061: 構文エラー: 識別子 'MixerDevice' d:\tfs\misc\winwavein\mixerline.h
メッセージが役に立たないのはなぜですか? 何が悪いのかわかりません。
FWIW、ファイルにはまったくエラーはありませんMixerDevice.h
。
編集:元のファイル全体は次のとおりです。
MixerLine.h
#pragma once
#define UNICODE
#include <stdio.h>
#include <string>
#include <windows.h>
#include "MixerDevice.h"
//////////////////////////////
class MixerLine {
private:
MIXERLINE _mixerLine;
public:
MixerLine(MixerDevice& parentMixer, DWORD destinationIndex);
~MixerLine();
// Properties
DWORD getDestinationLineIndex() {
return _mixerLine.dwDestination;
}
DWORD getSourceIndex() {
return _mixerLine.dwSource;
}
DWORD getLineId() {
return _mixerLine.dwLineID;
}
DWORD getStatus() {
return _mixerLine.fdwLine;
}
std:wstring getStatusString() {
switch( _mixerLine.fdwLine ) {
case MIXERLINE_LINEF_ACTIVE:
return L"MIXERLINE_LINEF_ACTIVE";
case MIXERLINE_LINEF_DISCONNECTED:
return L"MIXERLINE_LINEF_DISCONNECTED";
case MIXERLINE_LINEF_SOURCE:
return L"MIXERLINE_LINEF_SOURCE";
default:
return L"";
}
}
DWORD getUserData() {
return _mixerLine.dwUser;
}
DWORD getComponentType() {
return _mixerLine.dwComponentType;
}
};
MixerDevice.h
#pragma once
#define UNICODE
#include <memory>
#include <stdio.h>
#include <iostream>
#include <vector>
#include <windows.h>
////////////////////////
#include "MixerLine.h"
class MixerDevice {
private:
DWORD _deviceId;
HMIXER _mixerHandle;
MIXERCAPS _mixerCaps;
public:
MixerDevice(DWORD deviceId);
~MixerDevice();
void enumerateLines();
// Properties
DWORD getDeviceId() {
return _deviceId;
}
HMIXEROBJ getHandle() {
return (HMIXEROBJ)_mixerHandle;
}
// Caps
WORD getManufacturerId() {
return _mixerCaps.wMid;
}
WORD getProductId() {
return _mixerCaps.wPid;
}
MMVERSION getDriverVersion() {
return _mixerCaps.vDriverVersion;
}
WCHAR* getProductName() {
return _mixerCaps.szPname;
}
DWORD getSupportBits() {
return _mixerCaps.fdwSupport;
}
DWORD getDestinationCount() {
return _mixerCaps.cDestinations;
}
};
MixerDevice.cpp (コンパイルしようとしているファイル):
#include "MixerDevice.h"
using namespace std;
MixerDevice::MixerDevice(DWORD deviceId) {
_deviceId = deviceId;
MMRESULT result;
result = mixerOpen( &_mixerHandle, deviceId, NULL, NULL, MIXER_OBJECTF_MIXER );
if( result != MMSYSERR_NOERROR ) throw new exception("Call to mixerOpen failed.", result);
result = mixerGetDevCaps( (UINT)_mixerHandle, &_mixerCaps, sizeof(MIXERCAPS) );
if( result != MMSYSERR_NOERROR ) throw new exception("Call to mixerGetDevCaps failed.", result);
}
MixerDevice::~MixerDevice() {
MMRESULT result = mixerClose( _mixerHandle );
if( result != MMSYSERR_NOERROR ) exit(666);
}
// Methods
void MixerDevice::enumerateLines() {
}