高分求助:为什么98下TAPI.LineGetID可以取得wave/out的Modem设备号,在2000下就不行了?我在98下用的很好的LineGetID,能取得Modem放音设备的wave/out设备号,在2000下怎么不行了?我用的是www.delphi-jedi.org下的TAPI函数库,2000年版本的。谢谢啊。

解决方案 »

  1.   

    高分求助:为什么98下TAPI.LineGetID可以取得wave/out的Modem设备号,在2000下就不行了?我在98下用的很好的LineGetID,能取得Modem放音设备的wave/out设备号,在2000下怎么不行了?我用的是www.delphi-jedi.org下的TAPI函数库,2000年版本的。谢谢啊。
    //我现在用的函数:
    Function GetWaveDeviceID:dWord;
    Var
        nState,nNeedSize,nLen,nSType:dWord;
        xVarString:pVarString;
        xValue:pChar;
    Begin
        Result:=0;      nState:=0;
        nLen:=8;                                 //用来保存ID的长度
        nNeedSize:=SizeOf(TVarString)+nLen;
        With Frm_Call do
        Try
            While True do begin                      //因为缓冲区可能小
                GetMem(xVarString,nNeedSize);        //分配内存区,注意:此处需为VarString而不是他的指针!!
                xVarString.dwTotalSize:=nNeedSize;   //初始化变量 StringFormat_Binary
                nState:=LineGetID(Line,AddressID,Call,LINECALLSELECT_Call,xVarString,'wave/out');  //成功返回0;2147483725 = STRUCTURETOOSMALL
                if xVarString.dwTotalSize>=xVarString.dwNeededSize then Break; //重新分配内存区
                if (nState<>LINEERR_STRUCTURETOOSMALL) and (nState<>0) then Exit;
                nNeedSize:=xVarString.dwNeededSize+nLen;
                FreeMem(xVarString);
            End;
            //dwWaveDev = (DWORD) *  ((DWORD *) ((LPSTR)vs + vs->dwStringOffset) );
            //Result:=PHandle(LpStr(xVarString)[xVarString.dwStringOffset])^;
            GetMem(xValue,xVarString^.dwStringSize);
            Move( pChar(xVarString)[xVarString^.dwStringOffset],xValue^,xVarString^.dwStringSize);  //xVarString^.dwStringOffset
            Result:=dWord(xValue^);
            ShowInfo('设备号:'+Inttostr(Result)+' 编码类型:'+Inttostr(xVarString^.dwStringFormat) );
        Finally
            if Assigned(xValue) then FreeMem(xValue);
            if Assigned(xVarString) then FreeMem(xVarString,nNeedSize);
        End;
    {       Inc(xVarString,xVarString^.dwStringOffset);
            Result:=(pDWord(xVarString))^;
            Dec(xVarString,xVarString^.dwStringOffset); }
    {About Params named 'DeviceClass' of LineGetID:
    If you want to play audio over the phone line, you should specify "wave/out";
    if you want to record audio, use "wave/in".}
      

  2.   

    怎么升级法?我下的是delphi-jedi的2000版TAPI库。
      

  3.   

    抱歉,没想到CSDN揭帖要求这么快,几天而已,我信誉分都没了。