Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вывод значения типа строки, По нажатию кнопки... 
:(
    Опции темы
NiJazz
  Дата 11.9.2003, 21:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Jazz coder
****


Профиль
Группа: Экс. модератор
Сообщений: 2286
Регистрация: 10.8.2003
Где: Москва

Репутация: 1
Всего: 23



Тут кнопка должна сделать так: определить, к каким группам относится пользователь, затем напечатать список в файл. Не хочет! Файл создаётся, но не заполняется. Почему это так?

void __fastcall TForm1::Button1Click(TObject *Sender)
{
DWORD EntriesRead = 0;
DWORD TotalEntries = 0;
DWORD i;
char *UserName;
LPGROUP_USERS_INFO_0 pBuf = NULL;
NetUserGetGroups(NULL,
(LPWSTR)UserName,
0,
(LPBYTE*)&pBuf,
MAX_PREFERRED_LENGTH,
&EntriesRead,
&TotalEntries);
FILE *f;
f = fopen("c:\\usg.txt","w");
for (i=1;i<=EntriesRead;i++)
{
fprintf(f,"%s\n",pBuf->grui0_name);
(LPBYTE*)pBuf++;
}
fclose(f);
}
PM MAIL   Вверх
RAN
Дата 11.9.2003, 22:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Экс. модератор
Сообщений: 709
Регистрация: 14.3.2003
Где: Щёлково Моск.обл.

Репутация: 5
Всего: 6



Потому что WideChar-строка. Тебе придётся переводить в char*. Последнее время такие темы часто создавались. Поищи.

И ещё - буфер pBuf надо освободить через NetApiBufferFree.
UserName должен быть типа LPWSTR. Так: (LPWSTR)UserName, нельзя перевести из char* в LPWSTR. И надо инициализировать UserName значением.
PM MAIL ICQ   Вверх
NiJazz
Дата 11.9.2003, 23:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Jazz coder
****


Профиль
Группа: Экс. модератор
Сообщений: 2286
Регистрация: 10.8.2003
Где: Москва

Репутация: 1
Всего: 23



Но как теперь закинуть в UserName имя пользователяconfused.gif

void __fastcall TForm1::Button1Click(TObject *Sender)
{
DWORD EntriesRead = 0;
DWORD TotalEntries = 0;
DWORD i;
LPWSTR UserName;
LPGROUP_USERS_INFO_0 pBuf = NULL;
NetUserGetGroups(NULL,
UserName,
0,
(LPBYTE*)&pBuf,
MAX_PREFERRED_LENGTH,
&EntriesRead,
&TotalEntries);
FILE *f;
char *s;
f = fopen("c:\\usg.txt","w");
for (i=1;i<=EntriesRead;i++)
{
strcpy(s, (char *)pBuf->grui0_name);
fprintf(f,"%s\n", s);
(LPBYTE*)pBuf++;
s[0] = '\0';
}
NetApiBufferFree(pBuf);
fclose(f);
}
PM MAIL   Вверх
RAN
Дата 11.9.2003, 23:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Экс. модератор
Сообщений: 709
Регистрация: 14.3.2003
Где: Щёлково Моск.обл.

Репутация: 5
Всего: 6



Ну, проблема то главным образом не в отсутствии имени и типе UserName'а (хотя и в этом тоже). Тебе надо строки переводить из формата в формат. Научишься это делать. И вопрос с закидованием UserName сам самой отпадёт. Для проверки можешь писать L"USERNAME". Но это если константа. А так MultiByteToWideChar и WideCharToMultiByte.
PM MAIL ICQ   Вверх
p0s0l
Дата 12.9.2003, 00:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: 2
Всего: 112



RAN:
Цитата
И ещё - буфер pBuf надо освободить через NetApiBufferFree

Только еще:
Цитата
The buffer passed in must have been previously allocated with NetApiBufferAlloc

А я бы сказал NetApiBufferAllocate

И по-моему строка
(LPBYTE*)pBuf++;
неправильная, хотя я в си несилен...
Надо чтобы pBuf увеличивался на размер GROUP_USERS_INFO_0

Это сообщение отредактировал(а) p0s0l - 12.9.2003, 00:35


--------------------
С уважением, г-н Посол.
PM   Вверх
RAN
Дата 12.9.2003, 01:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Экс. модератор
Сообщений: 709
Регистрация: 14.3.2003
Где: Щёлково Моск.обл.

Репутация: 5
Всего: 6



Цитата
И по-моему строка
(LPBYTE*)pBuf++;
неправильная,

Неправильная, но работать будет. Потому что сначала будет выполнено ++, а потом преобразование "впустую". Здесь (LPBYTE*) лишнее.
Цитата
Только еще:
QUOTE
The buffer passed in must have been previously allocated with NetApiBufferAlloc

А я бы сказал NetApiBufferAllocate

А сколько выделять? Я это тоже видел, но примеров нет и не понятно сколько памяти выделять.
PM MAIL ICQ   Вверх
p0s0l
Дата 12.9.2003, 05:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: 2
Всего: 112



Все-таки ничего не надо выделять - это хелп допотопный...
В MSDN'е:
Цитата
bufptr
[out] Pointer to the buffer that receives the data. This buffer is allocated by the system and must be freed using the NetApiBufferFree function. Note that you must free the buffer even if the function fails with ERROR_MORE_DATA.



--------------------
С уважением, г-н Посол.
PM   Вверх
RAN
Дата 12.9.2003, 13:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Экс. модератор
Сообщений: 709
Регистрация: 14.3.2003
Где: Щёлково Моск.обл.

Репутация: 5
Всего: 6



PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0540 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.