На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Соблюдайте общие правила форума
Пожалуйста, выделяйте текст программы тегом [сode=pas] ... [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.
Указывайте точные версии Delphi и используемых сетевых библиотек.

Не приветствуется поднятие старых тем. Если ваш вопрос перекликается со старой темой, то для вопроса лучше создать новую тему, а старую указать в первом сообщении с описанием взаимосвязи.

Внимание:
попытки открытия обсуждений реализации вредоносного ПО, включая различные интерпретации спам-ботов, наказывается предупреждением на 30 дней.
Повторная попытка - 60 дней. Последующие попытки бан.
Мат в разделе - бан на три месяца...

Полезные ссылки:
user posted image MSDN Library user posted image FAQ раздела user posted image Поиск по разделу user posted image Как правильно задавать вопросы


Выразить свое отношение к модераторам раздела можно здесь: user posted image Krid, user posted image Rouse_

Модераторы: Krid, Rouse_
  
> Помогите плз разбраться с функцией NetUseAdd , (Перевести из C)
    В случае если использовать чтонить типа WNetAddConnection Все работает ок... Решил посмотреть разницу межде функцией NetUseAdd На дельфе примеров вообще не нашел... Начал искать описание функции и используемых структур
    нашел:

    MSDN (NetUseAdd)
    MSDN (_USE_INFO_1)
    MSDN (_USE_INFO_2)

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

    вот в структурах указаны типы: LMSTR,LPWSTR

    LPWSTR я предположил что это PWideChar.
    LMSTR Подумал что или PChar или тот же PWideChar
    Подскажите пожалуйста по поводу соответствия типов. Что есть что в реальности а не как я думаю?

    Далее непонятен параметр Level в функции NetUseAdd. Этот параметр означает что если 1 то надо использовать структуру _USE_INFO_1 а если 2 то _USE_INFO_2 ?
    PDWord в последнем Аргументе Функции? Как его правильно указать? Так же PDWord? или Pointer? и посдставлять туда указатель на переменную в виде @Perem? или же это надо указывать как Var ...:DWord?

    Непонятен параметр ui1_status из структур... похоже на коды каких ошибок которые должны возвращаться... или это дейтсвие которое мне требуется делать?
    Если это дейтсвие то тогда где можно узнать коды этих параметров? тот же USE_OK это 0 или 1 или еще какой?

    Попробовал сделать так... что то происходит но не совсем то что нужно...
    ExpandedWrap disabled
      Функцию объявил так:
      Function NetUseAdd(UncServerName:PChar;Level:DWORD;Buf:Pointer;ParmError:PDWORD):DWord; stdcall;external 'netapi32.dll' Name 'NetUseAdd';
      Типы правильно я поставил или нет?
       
      Function StringToPWide(Const sStr:String): PWideChar;
      var
      pw:PWideChar;
      iSize:Integer;
      iNewSize:Integer;
      begin
      iSize := Length(sStr) + 1;
      iNewSize := iSize * 2;
      pw := AllocMem(iNewSize);
      MultiByteToWideChar(CP_ACP, 0, PChar(sStr), iSize, pw, iNewSize);
      Result := pw;
      end;
       
       
      Procedure TestCon(Const Server,UserName,Password:String);
      Var
      Buf:USE_INFO_1;
      Buf1:USE_INFO_2;
      ErrorCode:DWord;
      Res:Cardinal;
      Begin
       
      ErrorCode:=0;
      Buf.ui1_local:=PChar('R:');
      Buf.ui1_remote:=PChar('\\127.0.0.1\C$');
      Buf.ui1_password:='';
      Buf.ui1_asg_type:=0;
      Buf.ui1_usecount:=1;
      Res:=NetUseAdd(PChar('\\127.0.0.1'),1,@Buf,@ErrorCode);
      Form1.Memo1.Lines.Add('Res='+IntToStr(Res)+'  Error='+IntToStr(GetLastError)+'  ErrorCode='+IntToStr(ErrorCode));
       
       
      Buf1.ui2_local:='';
      Buf1.ui2_remote:=PChar('\\127.0.0.1\IPC$');
      Buf1.ui2_password:=PChar('test');
      Buf1.ui2_asg_type:=0; //resourcetype_ANY;
      Buf1.ui2_usecount:=1;
      //Buf1.ui2_username:=StringToOleStr('test');
      Buf1.ui2_username:=StringToPWide('test');
      Buf1.ui2_domainname:='';
      ErrorCode:=0;
      Res:=NetUseAdd(PChar('\\127.0.0.1'),2,@Buf1,@ErrorCode);
      Form1.Memo1.Lines.Add('Res='+IntToStr(Res)+'  Error='+IntToStr(GetLastError)+'  ErrorCode='+IntToStr(ErrorCode));
      End;


    Результат выполнения
    ExpandedWrap disabled
      Res=123  Error=0  ErrorCode=0
      Res=123  Error=5  ErrorCode=0


    Во втором варианте хоть какой то выдало в ответе эррор типа достпуп запрещен...

    Подскажите пожалуйста, что я делаю не правильно?
    1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
    0 пользователей:


    Рейтинг@Mail.ru
    [ Script execution time: 0.0625 ]   [ 15 queries used ]   [ Generated: 24.10.26, 05:45 GMT ]