![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
GetComputerNameEx [WinXP]
Германн © (2007-05-04 02:30:00)Почему сия функция есть в справке, но отсутствует в Windows.pas?
И при этом фигурирует и в справке и в kernel32.def, который в каталоге для С++ Билдера?
BDS2006
Германн (2007-05-10 03:04:00) [1]
> TStas © (09.05.07 23:59) [19]
>
> Жалко, ссылка не открывается:(
>
Какая именно ссылка не открывается?
TStas (2007-05-09 23:59:00) [2]Жалко, ссылка не открывается:(
Игорь Шевченко (2007-05-07 11:50:00) [3]Германн © (04.05.07 21:25) [11]
> Гугление по сайту http://www.delphi-jedi.orgне дало ни
> одного совпадения с сабжем :(
Вот же.
А я сразу нашел: ftp://ftp.delphi-jedi.org/api/win32api.zip, unit JwaWinBase.pas
Leonid Troyanovsky (2007-05-06 10:17:00) [4]
> Германн © (06.05.07 02:10) [16]
> Попутно возник вопрос. А что кроме FormatMessage нет иных
> путей обработать LastError?
Win32Check?
--
Regards, LVT.
Германн (2007-05-06 02:10:00) [5]Попробовал. Работает.
Попутно возник вопрос. А что кроме FormatMessage нет иных путей обработать LastError?
Германн (2007-05-06 00:32:00) [6]
> begin...end © (05.05.07 07:14) [14]
Спасибо.
begin...end (2007-05-05 07:14:00) [7]> Германн © (05.05.07 00:49) [13]
> А есть ли разница var PChar или PChar?
Да, безусловно. Функция ожидает, что ей передадут адрес буфера для хранения тела строки. Указывая var, Вы заставляете компилятор передавать в функцию не этот адрес, а адрес переменной, в которой он лежит. Естественно, будет ошибка.
> правильно ли я описал тип TNameType
Здесь я ошибок не вижу.
И ещё кое-что, о чём не следует забывать: в kernel32 функции с таким именем нет. Т.к. она работает со строками, есть две её версии: GetComputerNameEx Aи GetComputerNameEx W. Т.е. импорт ANSI-версии будет выглядеть так:
function GetComputerNameEx(NameType: TNameType; Buff: PChar; var Size: DWORD): BOOL; stdcall;
external 'kernel32.dll' name 'GetComputerNameExA';
Германн (2007-05-05 00:49:00) [8]
> begin...end © (04.05.07 21:45) [12]
>
> > Германн © (04.05.07 21:25) [11]
>
> Перед Buff не нужно var. И не забудьте указать соглашение
> о вызове (stdcall).
>
Насчёт соглашения о вызовах, конечно не забуду. И то, что данное соглашение имеет префикс stdне случайно, я тоже понимаю. Не "первый раз замужем" :)
А вот о var Buff хотелось бы поподробнее. Стал тут шерстить все функции имеющие параметром PChar и не нашел ни одной, где параметр такого типа был бы объявлен как var-параметр. А есть ли разница var PChar или PChar?
Но в основном я хотел в [11] спросить правильно ли я описал тип TNameType. Токмо вот, к сожалению, забыл привести его Си-шное описание:
typedef enum _COMPUTER_NAME_FORMAT
{
ComputerNameNetBIOS,
ComputerNameDnsHostname,
ComputerNameDnsDomain,
ComputerNameDnsFullyQualified,
ComputerNamePhysicalNetBIOS,
ComputerNamePhysicalDnsHostname,
ComputerNamePhysicalDnsDomain,
ComputerNamePhysicalDnsFullyQualified,
ComputerNameMax
}COMPUTER_NAME_FORMAT;
У меня "на подхвате" были в тот момент два "Си-шника". Один - "чистый Си-шник", не знающий борланда ответил, что я не прав, если отталкиваться от "стандарта". Что есть "стандарт" он не уточнил, а я не стал выспрашивать, поскольку его квалификация для меня пока спорна. Другой, которого квалификацию я себе чётко представляю, который работает на С++Билдере, подтвердил моё мнение о данном типе.
begin...end (2007-05-04 21:45:00) [9]> Германн © (04.05.07 21:25) [11]
Перед Buff не нужно var. И не забудьте указать соглашение о вызове (stdcall).
Германн (2007-05-04 21:25:00) [10]
> Игорь Шевченко © (04.05.07 11:40) [8]
>
>
> > Почему сия функция есть в справке, но отсутствует в Windows.
>
> > pas?
>
>
> Потому что не перевели. Для того, чтобы ее использовать,
> можно скачать прототип с http://www.delphi-jedi.orgиз
> раздела API translation (вроде так)
>
Гугление по сайту http://www.delphi-jedi.orgне дало ни одного совпадения с сабжем :(
Ну дык, а msdn на что?
BOOL GetComputerNameEx(
COMPUTER_NAME_FORMAT NameType,
LPTSTR lpBuffer,
LPDWORD lpnSize
);
type
TNameType = (ComputerNameNetBIOS, ComputerNameDnsHostname, ComputerNameDnsDomain, ComputerNameDnsFullyQualified, ComputerNamePhysicalNetBIOS, ComputerNamePhysicalDnsHostname,
ComputerNamePhysicalDnsDomain, ComputerNamePhysicalDnsFullyQualified,
ComputerNameMax);
function GetComputerNameEx(NameType: TNameType; var Buff: PChar; var Size : DWord));
Если я неправильно перевел что-то, ткните меня носом, пожалуйста!
Rouse_ (2007-05-04 13:11:00) [11]Хе, User и Computer это я да :)))
clickmaker (2007-05-04 11:49:00) [12]
> [7] begin...end © (04.05.07 11:37)
> Кто-нибудь читал сабж?
интересно, что бы знатоки психологии сказали про очитку User вместо Computer...
Игорь Шевченко (2007-05-04 11:40:00) [13]
> Почему сия функция есть в справке, но отсутствует в Windows.
> pas?
Потому что не перевели. Для того, чтобы ее использовать, можно скачать прототип с http://www.delphi-jedi.orgиз раздела API translation (вроде так)
begin...end (2007-05-04 11:37:00) [14]Кто-нибудь читал сабж?
Leonid Troyanovsky (2007-05-04 11:20:00) [15]
> umbra © (04.05.07 11:15) [5]
> > Rouse_ © (04.05.07 11:01) [4]
> > > begin...end © (04.05.07 10:38) [3]
> > > > clickmaker © (04.05.07 09:57) [2]
> > http://msdn2.microsoft.com/en-us/library/ms724435.aspx
> ?
Sic!
--
Regards, LVT.
umbra (2007-05-04 11:15:00) [16]
> Rouse_ © (04.05.07 11:01) [4]
> > begin...end © (04.05.07 10:38) [3]
> > > clickmaker © (04.05.07 09:57) [2]
> >
> > ?
>
> http://msdn2.microsoft.com/en-us/library/ms724435.aspx
>
?
Rouse_ (2007-05-04 11:01:00) [17]
> begin...end © (04.05.07 10:38) [3]
> > clickmaker © (04.05.07 09:57) [2]
>
> ?
http://msdn2.microsoft.com/en-us/library/ms724435.aspx
begin...end (2007-05-04 10:38:00) [18]> clickmaker © (04.05.07 09:57) [2]
?
clickmaker (2007-05-04 09:57:00) [19]secur32.dll
begin...end (2007-05-04 08:05:00) [20]А какая разница, почему? Надо использовать -- значит, импортируйте её из kernel32.dll самостоятельно.