출처는 다음과 같습니다.
http://www.stuckindoors.com/delphi/acm/index.html
델파이로 만들어진 컴포넌트구여 먼저 압축푸십시오.
File->New->Package->Add 한후
다음의 다섯개의 파일들을 선택해주신후 install 시켜주시면 되겠습니다.
MSAcm.pas
ACMOut.pas
ACMIn.pas
ACMConvertor.pas
ACMConvertorReg.pas
그러면 똑같은 이름의 확장자만 .hpp 인파일들이 그 디렉토리에 생깁니다.
이놈들을 include\vcl 디렉토리로 복사해넣어주세요.
근데 문제점이 있습니다.(중요)
이컴포넌트를 가지고 컴파일하면 에러가 나더군요.
그래서 .hpp파일을 약간 수정을 해야합니다.
아무래도 델파이 컴포넌트가 빌더에서 완벽하게 호환이 안되는탓이라 생각됩니다.
저는 빌더4에서 해봤구요 에러가나서 다음과 같이 고쳤습니다.
[C++ Fatal Error] MSAcm.h(20): F1003 Error directive: MMREG.H version 142 or greater to be included first.
위의 에러이죠.
그런데 mmreg.h에서 버전을 바꿔보기도 해보고 msacm.h에서 조건부매크로를 주석처리해보기도 했지만
여전히 에러들이 없어지지 않았습니다.
그래서 이건 버전문제가 아니라 인클루드의 문제가 아닐까 생각했죠
그래서 msacm.hpp 파일을 열어서 #include "MMReg.h"를 #include "MSAcm.h" 라인위에 추가시켰습니다.
그랬더니 type name expected 에러가 뜨더군요.
그래서 첫번째 에러를 조사해봤습니다.
MSAcm.h 파일에는 다음과 같이 선언되어있더군요
typedef struct tACMDRIVERDETAILSA
{
DWORD cbStruct; // number of valid bytes in structure
FOURCC fccType; // compressor type 'audc'
FOURCC fccComp; // sub-type (not used; reserved)
WORD wMid; // manufacturer id
WORD wPid; // product id
DWORD vdwACM; // version of the ACM *compiled* for
DWORD vdwDriver; // version of the driver
DWORD fdwSupport; // misc. support flags
DWORD cFormatTags; // total unique format tags supported
DWORD cFilterTags; // total unique filter tags supported
HICON hicon; // handle to custom icon
char szShortName[ACMDRIVERDETAILS_SHORTNAME_CHARS];
char szLongName[ACMDRIVERDETAILS_LONGNAME_CHARS];
char szCopyright[ACMDRIVERDETAILS_COPYRIGHT_CHARS];
char szLicensing[ACMDRIVERDETAILS_LICENSING_CHARS];
char szFeatures[ACMDRIVERDETAILS_FEATURES_CHARS];
} ACMDRIVERDETAILSA, *PACMDRIVERDETAILSA, FAR *LPACMDRIVERDETAILSA;
그런데 MSAcm.hpp 파일에는 다음과 같이 선언되어있었죠.
typedef _ACMDRIVERDETAILSA *PAcmDriverDetailsA;
정확하게는 왜 에러가 나야하는지 모르겠지만 왠지 이부분을 주석처리해야 되지 않을까 생각되어서
에러난부분 모두를 주석처리했습니다.
혹시 이부분에 대해서 왜 이렇게 되는지 아시면 설명좀 부탁드립니다.
그리고 또한곳이 에러가나는데
ACMConvertor.hpp 였습니다.
_ACMFORMATCHOOSEA FChooseData;
이부분이 에러가 났죠.
마찬가지로 type name expected 에러였습니다.
그래서 MSAcm.h 를 찾아보았더니
typedef struct tACMFORMATCHOOSEA
{
DWORD cbStruct; // sizeof(ACMFORMATCHOOSE)
DWORD fdwStyle; // chooser style flags
HWND hwndOwner; // caller's window handle
LPWAVEFORMATEX pwfx; // ptr to wfx buf to receive choice
DWORD cbwfx; // size of mem buf for pwfx
LPCSTR pszTitle; // dialog box title bar
char szFormatTag[ACMFORMATTAGDETAILS_FORMATTAG_CHARS];
char szFormat[ACMFORMATDETAILS_FORMAT_CHARS];
LPSTR pszName; // custom name selection
DWORD cchName; // size in chars of mem buf for pszName
DWORD fdwEnum; // format enumeration restrictions
LPWAVEFORMATEX pwfxEnum; // format describing restrictions
HINSTANCE hInstance; // app instance containing dlg template
LPCSTR pszTemplateName; // custom template name
LPARAM lCustData; // data passed to hook fn.
ACMFORMATCHOOSEHOOKPROCA pfnHook; // ptr to hook function
} ACMFORMATCHOOSEA, *PACMFORMATCHOOSEA, FAR *LPACMFORMATCHOOSEA;
이렇게 되어있더군요 .. 그리고 앞에 언더바가 붙은 이름은 없었습니다.
그래서 언더바를 빼버렸죠.
ACMFORMATCHOOSEA FChooseData; 이렇게 고쳤죠
그리고 한줄 더있었는데
// HACMSTREAM__ *FStreamHandle;
HACMSTREAM *FStreamHandle;
뒤에 언더바 두개 빼버렸습니다.
제가 빌더4에서 한것이라서 다른버젼에서는 다른방법으로 해야 할지도 모르겠습니다.
하지만 대충 제가한것을 응용해서 하시면 되리라 생각됩니다.
그리고 예제는 나중에 올려드리겠습니다.