我编译这个函数,有几个未知类型的错误,应该声明哪几个单元啊?
//-----------------------------------------------------------------------------------[Error] MainUnit.pas(60): Undeclared identifier: 'HACMDRIVERID'
[Error] MainUnit.pas(62): Undeclared identifier: 'HACMDRIVER'
[Error] MainUnit.pas(63): Undeclared identifier: 'TACMDRIVERDETAILS'
[Error] MainUnit.pas(65): Undeclared identifier: 'TACMFORMATTAGDETAILS'
[Error] MainUnit.pas(67): Undeclared identifier: 'ACMDRIVERDETAILS_SUPPORTF_CODEC'
[Error] MainUnit.pas(69): Missing operator or semicolon
[Error] MainUnit.pas(70): Undeclared identifier: 'acmDriverDetails'
[Error] MainUnit.pas(71): Undeclared identifier: 'acmDriverOpen'
[Error] MainUnit.pas(72): 'DO' expected but identifier 'cFormatTags' found
[Error] MainUnit.pas(75): Missing operator or semicolon
[Error] MainUnit.pas(76): Missing operator or semicolon
[Error] MainUnit.pas(77): Undeclared identifier: 'acmFormatTagDetails'
[Error] MainUnit.pas(77): Undeclared identifier: 'ACM_FORMATTAGDETAILSF_INDEX'
[Error] MainUnit.pas(78): ')' expected but identifier 'dwFormatTag' found
[Error] MainUnit.pas(100): Statement expected but 'PROCEDURE' found//--------------------------------------------------------------------------------function acmDriverEnumCallback(hadid: HACMDRIVERID; dwInstance: DWORD; fdwSupport: DWORD): BOOL; stdcall;
var
  driver                                                    : HACMDRIVER;
  details                                                   : TACMDRIVERDETAILS;
  i                                                         : integer;
  fmtDetails                                                : TACMFORMATTAGDETAILS;
begin
  if (fdwSupport and ACMDRIVERDETAILS_SUPPORTF_CODEC) <> 0 then
  begin
    details.cbStruct := sizeof(TACMDRIVERDETAILS);
    acmDriverDetails(hadid, details, 0);
    acmDriverOpen(driver, hadid, 0);
    for i := 0 to details.cFormatTags - 1 do
    begin
      ZeroMemory(@fmtDetails, sizeof(fmtDetails));
      fmtDetails.cbStruct := sizeof(TACMFORMATTAGDETAILS);
      fmtDetails.dwFormatTagIndex := i;
      acmFormatTagDetails(driver, fmtDetails, ACM_FORMATTAGDETAILSF_INDEX);
      if (fmtDetails.dwFormatTag = WAVE_FORMAT_MPEGLAYER3) then inc(g_mp3Drivers);
    end;
    acmDriverClose(driver, 0);
  end;
  Result := true;
end;

解决方案 »

  1.   

    用到了msacm32.dll这个类库,把它导入到你的工程中
      

  2.   

    project->impot type library->add选择msacm32.dll
      

  3.   

    msacm32.dll什么时候成了Type Library?
      

  4.   

    谢谢指正,msacm32.dll不是COM.
    建议楼主去找msacm.pas文件,获者直接看这里.
    http://www.programmersheaven.com/download/2734/0/ZipView.aspx
      

  5.   


    我在工程里添加了 msacm.pas,编译后,还有个类型错误 
    [Error] MainUnit.pas(78): Undeclared identifier: 'WAVE_FORMAT_MPEGLAYER3'怎么办啊  谢谢 
      
      

  6.   

    const
    WAVE_FORMAT_MPEGLAYER3 = $0055;
    参考至MMReg.pas
    http://flocke.vssd.de/prog/apps/pascal/mp3conv/cur/MMReg.pas.html
      

  7.   

    你上网去下一个msacm.pas 加到你的工程就好了。
    你是不是刚学delphi呀。
    mmreg.pas也是一个必须的文件,如果你想做格式转换。这个定义文件会让你省很多时间。先把这个找齐了再慢慢玩吧