![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Не пойму в чем проблема 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;