我刚调试了你的程序
除了tacmout这个类型的数据,我没有注释了,其它的一切正常,
你这是个什么类型,要是个类的话,就需要先创建才能用,其它的我没有发现问题了,你在看看吧。

解决方案 »

  1.   

    unit PlayThreadUnit; 
    interface 
    uses 
      Classes,AcmOut; 
    type 
      PlayThread = class(TThread) 
      private 
        acmoutobj:tacmout; 
        playdata:pointer; 
        playsize:integer; 
      protected 
        procedure Execute; override; 
        procedure playout; 
      public 
        constructor Create(acmout:tacmout;data:pointer;size:integer); 
      end; 
    implementation 
      
    constructor PlayThread.Create(acmout:tacmout;data: pointer; size: integer); 
    begin 
    inherited Create(false); 
      
    //-》acmoutobj:=acmout;《-报错 
    //传入的这个acmout要是一个已经创建了的实例,如果此类型是个类的话。  
    playdata:=data; 
    playsize:=size; 
    freeonterminate:=true; 
    end; 
    procedure PlayThread.Execute; 
    begin 
      { Place thread code here } 
    synchronize(playout); 
    if terminated then exit; 
    end; 
    procedure PlayThread.playout; 
    begin 
    acmoutobj.Play(playdata^,playsize); 
    end; 
    end.
      

  2.   

    acmout:=Tacmout.create()
    如果tacmout是类的话,必须这样写,你有写过吗?
      

  3.   

    unit PlayThreadUnit; 
    interface 
    uses 
      Classes,AcmOut; 
    type 
      PlayThread = class(TThread) 
      private 
        acmoutobj:tacmout; 
        playdata:pointer; 
        playsize:integer; 
      protected 
        procedure Execute; override; 
        procedure playout; 
      public 
        constructor Create(acmout:tacmout;data:pointer;size:integer); 
      end; 
    implementation 
      
    constructor PlayThread.Create(acmout:tacmout;data: pointer; size: integer); 
    begin 
    inherited Create(false); 
      
    //-》acmoutobj:=acmout;《-报错 
    //传入的这个acmout要是一个已经创建了的实例,如果此类型是个类的话。 
    If asssined(acmout) then
      acmoutobj:=acmout; 
    playdata:=data; 
    playsize:=size; 
    freeonterminate:=true; 
    end; 
    procedure PlayThread.Execute; 
    begin 
      { Place thread code here } 
    synchronize(playout); 
    if terminated then exit; 
    end; 
    procedure PlayThread.playout; 
    begin 
    acmoutobj.Play(playdata^,playsize); 
    end; 
    end.
      

  4.   

    你不能让
    acmoutobj.Play(playdata^,playsize); 
    在主线程的代码中实现吗?
      

  5.   

    我用到了两个acmout控件,一个回放自己的声音,一个播放网络上来的声音。
    两个不能同时播放,会起冲突。所以要用线程。