Конференция "WinAPI" » Tapi -> LineGetId
 
  • kolj (27.03.08 11:43) [0]
    Возникла проблема с ф-й LineGetId, если кто-то работал исправьте где не правильно. Спасибо .
    Значення яке повертає err = - 2743123651

    var
    hlin:hline;
    hCal : HCALL;
    DeviceID :^tvarstring;
    err,l:longint;
    begin
     l:= sizeof(deviceid^);
     GetMem(deviceid,l);
     deviceid.dwTotalSize := l;

    err:=linegetid ( 0 , 0, Hcal , LINECALLSELECT_LINE  , @deviceid,'wave/out');

    if deviceid.dwTotalSize < deviceid.dwNeededSize then begin
    l:=deviceid.dwNeededSize;
    getmem(deviceid,l);
    deviceid.dwTotalSize:=l;
    err:=linegetid( 0 , 0 , HCal,LINECALLSELECT_LINE,@deviceid,'wave/out');
    end;
  • han_malign © (27.03.08 13:39) [1]
    - выдернуто из контекста, но надеюсь разберешься
    var sz: DWORD;
       lpDeviceID: PVarString;
    begin
     sz:=sizeof(TVarString); lpDeviceID:=nil;
     repeat
       if(lpDeviceID<>nil)then FreeMem(lpDeviceID);
       GetMem(lpDeviceID,sz);fillchar(lpDeviceID^,sz,0);
       lpDeviceID.dwTotalSize:=sz;
       Result:=lineGetId(F_hLine,dwAddressID,hCall,dwSelect,lpDeviceID,Pointer(lpszDevi ceClass));
       sz:=lpDeviceID.dwNeededSize;
     until((Result<>0)or(lpDeviceID.dwTotalSize>=lpDeviceID.dwNeededSize));
     if(lpDeviceID<>nil)then begin
       FreeMem(lpDeviceID);
     end;
    end;

  • han_malign © (27.03.08 13:42) [2]
    а не - вру - не поможет, у тебя и так почти тоже самое, ща посмотрю, что за ошибка
  • han_malign © (27.03.08 13:50) [3]
    значение err - левое, а вот нахрена ты второй раз адрес указателя берешь - непонятно...
    собаку убери...
  • kolj (27.03.08 16:21) [4]
    to han_malign.
    Попробовал твой пример, значение  result = - 2743123565.

    > значение err - левое
    ф-я дает неправильное значение  ?

    подкажы пожалуйста как со структруи VARSTRING  взять идентификатор устройства.
  • kolj (27.03.08 16:31) [5]
    какие надо параметры передавать в ф-ю linegetid ?
  • han_malign © (27.03.08 16:52) [6]

    > какие надо параметры передавать в ф-ю linegetid ?

    для начала надо lineInitializeEx сделать, а вот зачем и почему - читай хелпы.
    Я тут вольный перевод MSDN-а делать не нанимался...
  • GanibalLector © (27.03.08 20:33) [7]
    У меня так :

    LINECALLSTATE_CONNECTED:
           begin
             if Call<>0 then
             begin
               lVarString := AllocMem(sizeof(lVarString^));
               lVarString^.dwTotalSize := sizeof(lVarString^);

               lineGetID(0, 0, Call, LINECALLSELECT_CALL, lVarString, 'comm/datamodem');
               if lVarString^.dwNeededSize > lVarString^.dwTotalSize then
               begin
                 ReallocMem(lVarString, lVarString^.dwNeededSize);
                 lVarString^.dwTotalSize := lVarString^.dwNeededSize;
                 I := lineGetID(0, 0, Call, LINECALLSELECT_CALL, lVarString, 'comm/datamodem');
                 if TApiFailed(I) then
                 begin
                   lineDrop(Call,nil,0);
                 end;    
               end;
             end;
           end;


  • kolj (28.03.08 09:19) [8]
    Дайте пожалуйста пример использования ф-и lineInitializeEx , и покажите где берете входные параметры
  • GanibalLector © (29.03.08 11:20) [9]
    >Дайте пожалуйста пример использования ф-и lineInitializeEx

    Получай:

    var R:Longint;
       ExParams:pLineInitializeExParams;
    begin
     ExParams:=AllocMem(SizeOf(TLineInitializeExParams)+1000);
     ExParams^.dwTotalSize:=SizeOf(TLineInitializeExParams)+1000;
     ExParams^.dwOptions:=FInitOpt;
     try
       R:=LineInitializeEx(PHLINEAPP(@FAppHandle),hInstance,CallBackFunc,PChar(FAppName ),FNumDev,FAPIHiVer,ExParams^);
       if R <>0 then  RaiseTAPILineError(R);
       case ExParams^.dwOptions of
         LINEINITIALIZEEXOPTION_USEEVENT:
         begin
           FEvent:=ExParams^.Handles.hEvent;
           FThread:=TTAPIThread.Create(FAppHandle,FEvent);
         end;
       end;
     finally
       FreeMem(ExParams);
     end;
    end;


Есть новые Нет новых   [134432   +20][b:0][p:0.002]