Помогите плз разбраться с функцией NetUseAdd
, (Перевести из C)
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [216.73.217.37] |
|
|
Соблюдайте общие правила форума
MSDN Library
FAQ раздела
Поиск по разделу
Как правильно задавать вопросы
Помогите плз разбраться с функцией NetUseAdd
, (Перевести из C)
|
Сообщ.
#1
,
|
|
|
|
В случае если использовать чтонить типа 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 или еще какой? Попробовал сделать так... что то происходит но не совсем то что нужно... ![]() ![]() Функцию объявил так: 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; Результат выполнения ![]() ![]() Res=123 Error=0 ErrorCode=0 Res=123 Error=5 ErrorCode=0 Во втором варианте хоть какой то выдало в ответе эррор типа достпуп запрещен... Подскажите пожалуйста, что я делаю не правильно? |