Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Не пойму в чем проблема Array and Char


Wadimkas ©   (2015-07-13 17:30:00) 

Есть функция

function GetSystemUserName: string;
var // Получить имя пользователя машины
 UserName: array[0..255] of Char;
 UserNameSize: DWORD;
begin
 UserNameSize := 255;
 if Windows.GetUserName(@UserName, UserNameSize) then
   Result := string(UserName)
 else
   Result := '';
end;

В нескольких моих прогах, все работает,
в одной не компилится, ошибка на @UserName что она array and Char
так прикол в том, что загружаю те проекты где они используются, все норм компилится.


Игорь Шевченко   (2015-07-13 22:44:00) [1]

http://segfault.kiev.ua/smart-questions-ru.html


Wadimkas   (2015-07-13 20:39:00) [2]

))))
ладно замяли тему, мне она уже не интересна
полтергейст не там


кгшзх   (2015-07-13 20:29:00) [3]

при чем здесь код, который помог?

речь об источнике ошибки.
возможные причины тебе назвали.
но тебе пофик, и ты продолжаешь читать мантру "ну как это так, ничего не менял, просто скопировал и не компилируется"

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

не надо убеждать форум, что у тебя завелся полтергейст, в то время как у тебя детская ошибка в коде


Wadimkas   (2015-07-13 20:14:00) [4]

)))да я не спорю, твой код помог
но его я заменил только в юните скопированном
то что все рассказали, не то все
UserName - локальная переменка, чисто в этой функции и ссылается на массив @UserName

который char


sniknik   (2015-07-13 20:13:00) [5]

++
кстати, приведи точный текст ошибки. не "что то вроде", а конкретно... если трудно по буквам перерисуй. или скрин сделай.


sniknik   (2015-07-13 20:11:00) [6]

> ну ругается она не в типе, а то что хочет char, а я типа ей даю array
ты ей даешь не array, а указатель, который в принципе автоконвертируется в нужное в функции PAnsiChar (то что в [4]), ну блин для полной гарантии можно явно переопределить -
Windows.GetUserNameA(PAnsiChar(@UserName), UserNameSize)
хотя, то что у тебя продолжает требовать именно char, а не pchar (как в генофонде), явно указывает, что функция переопределена.

> все варианты в чем причина
+
переопределен тип char/... либо сам, либо в подключаемом модуле


кгшзх   (2015-07-13 19:17:00) [7]

все варианты в чем причина тебе уже рассказали.

а ты настаиваешь на влиянии волшебства и магии.


кгшзх   (2015-07-13 19:14:00) [8]

Ругаецо именно на @UserName

Там где ругаетсо - там есть еще один идентификатор UserName.


Wadimkas   (2015-07-13 19:14:00) [9]

код даже не копирывался, копирывал весь unit в другой проект


кгшзх   (2015-07-13 19:08:00) [10]

пофик какая делфи (с анси вариантом).
либо юзез, либо пересечение одноименных идентификаторов
либо здесь приведен один код, а реально некомпилится совсем другой.


кгшзх   (2015-07-13 19:00:00) [11]

для начала посмотри что хочет первым параметром GetUserName.
и что даешь ей ты.


Wadimkas   (2015-07-13 18:46:00) [12]

ну ругается она не в типе, а то что хочет char, а я типа ей даю array


Wadimkas   (2015-07-13 18:45:00) [13]

сории Char;


Wadimkas   (2015-07-13 18:44:00) [14]

Delphi 7
Ругаецо именно на @UserName, а она в var`e UserName: array[0..255] of AnsiChar;


sniknik   (2015-07-13 18:39:00) [15]

дельфя то какая? может с юникодом связано/где то путаница... попробуй везде явно тип ставить/вызывать ансишную функцию -
function GetSystemUserName: AnsiString;
var // Получить имя пользователя машины
UserName: array[0..255] of AnsiChar;
UserNameSize: DWORD;
begin
UserNameSize := 255;
if Windows.GetUserNameA(@UserName, UserNameSize) then
  Result := UserName
else
  Result := '';
end;


кгшзх   (2015-07-13 18:37:00) [16]

там где не компилится  - там юзез другой.


Wadimkas   (2015-07-13 17:54:00) [17]

Благодарствую, вот только прикола не понял, в одной компилится а в другой нет?
но там где компилится все работает!


кгшзх   (2015-07-13 17:47:00) [18]

function GetSystemUserName : Ansistring;
var UserNameSize: Cardinal;
begin
Result := '';
UserNameSize := 0;
if not GetUserName(nil, UserNameSize) and (GetLastError = ERROR_INSUFFICIENT_BUFFER) then
 begin
  SetLength(Result, UserNameSize);
  GetUserName(PAnsiChar(Result), UserNameSize);
 end;
end;


Наверх

Титульная страница Поиск, карта сайта Написать письмо