Re[2]: Как передать в API функцию ссылку на массив структур
От: ayap Россия  
Дата: 22.12.05 09:35
Оценка:
Здравствуйте, ekamaloff, Вы писали:

E>Здравствуйте, ayap, Вы писали:


A>>Вопрос как правильно создать массив структур и в поле aDsScopeInfos его положить?


E>Может приведете свой код полностью, с инициализацией полей структуры DSOP_INIT_INFO?


Пжалста:

...


type
  DSOP_SCOPE_INIT_INFO = record
    cbSize: Longint;
    flType: Longint;
    flScope: Longint;
    FilterFlags: DSOP_FILTER_FLAGS;
    pwzDcName: LPWSTR;
    pwzADsPath: LPWSTR;
    hr: HResult;
  end;

  PDSOP_SCOPE_INIT_INFO = ?


  DSOP_INIT_INFO = record
    cbSize: Longint;
    pwzTargetComputer: LPWSTR;
    cDsScopeInfos: Longint;
    aDsScopeInfos: PDSOP_SCOPE_INIT_INFO;
    flOptions: LongInt;
    cAttributesToFetch: Longint;
    apwzAttributeNames: PLPWSTR;
  end;
  PDSOP_INIT_INFO = ^DSOP_INIT_INFO;

  IDsObjectPicker = interface(IUnknown)
    ['{0C87E64E-3B7A-11D2-B9E0-00C04FD8DBF7}']
     function Initialize(pInitInfo: PDSOP_INIT_INFO ): HResult; stdcall;
     function InvokeDialog(Parent: HWND; doSelections: IUnknown): HResult; stdcall;
  end;

...
var
  InitInfo: PDSOP_INIT_INFO;
  aScopeInit: PDSOP_SCOPE_INIT_INFO;
...
begin
  try
...
    InitInfo := GetMemory(sizeof(DSOP_INIT_INFO));
    InitInfo.cbSize := sizeof(DSOP_INIT_INFO);
    InitInfo.pwzTargetComputer := LPWSTR(CompName);
    InitInfo.cDsScopeInfos := sizeof(aScopeInit);
    InitInfo.aDsScopeInfos := aScopeInit;
    InitInfo.flOptions := DSOP_FLAG_MULTISELECT or DSOP_FLAG_SKIP_TARGET_COMPUTER_DC_CHECK;
    InitInfo.cAttributesToFetch := 0;
    InitInfo.apwzAttributeNames := nil;

    (obj as IDsObjectPicker).Initialize(InitInfo);
  finally
    FreeMemory(InitInfo);
  end;

end;



Непонятно все выделенное жирным
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.