Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Не хочет работать VC.


Автор: NiJazz 14.9.2003, 20:39
Такой вот код. Тут используются АПИ функции. При команде compile Visual C++ ошибок не выдаёт, а как только надо сделать build *.exe, выдаёт три ошибки. Вот такие:

///////////////////////////////////////////////////////////////////////////////////
--------------------Configuration: test - Win32 Debug--------------------
Linking...
test.obj : error LNK2001: unresolved external symbol _NetApiBufferFree@4
test.obj : error LNK2001: unresolved external symbol _NetUserGetGroups@28
Debug/test.exe : fatal error LNK1120: 2 unresolved externals
Error executing link.exe.

test.exe - 3 error(s), 0 warning(s)
///////////////////////////////////////////////////////////////////////////////////

#include <windows.h>
#include <stdio.h>
#include <lm.h>
#include <string.h>

int main()
{
DWORD EntriesRead = 0;
DWORD TotalEntries = 0;
LPGROUP_USERS_INFO_0 pBuf = NULL;
WCHAR wszUserName[UNLEN+1];
LPCWSTR servername = NULL;
char *UserName = NULL;
DWORD index;
FILE *f = NULL;

strcpy(UserName, "NiJazz");

MultiByteToWideChar(CP_ACP, 0, UserName,
strlen(UserName)+1, wszUserName,
sizeof(wszUserName)/sizeof(wszUserName[0]) );

NetUserGetGroups(servername,
wszUserName,
0,
(LPBYTE*)&pBuf,
MAX_PREFERRED_LENGTH,
&EntriesRead,
&TotalEntries);


for (index = 0; index <= EntriesRead; index ++)
{
fwprintf(f, L"%s\n", pBuf->grui0_name);
pBuf++;
}
NetApiBufferFree(pBuf);
fclose(f);
return 0;
}

Автор: Baa 14.9.2003, 21:51
Правильно, потому как ты либу не прилинковал...
после инклудов впиши: #pragma comment (lib, "netapi32.lib")

Автор: RAN 14.9.2003, 21:51
Включи netapi32.lib

Меню Project -> Setting...
В setting for... выбери All Configurations
Закладка Link
Выбури Category - General
В поле Object/library modules в конце через пробел допиши netapi32.lib
Теперь собирай

Другой способ:
Меню Project->Add to Project->Files (или правая кнопка мыши на названии проекта в навигаторе и там Add Files to Project...)
Ищешь файл netapi32.lib в директории lib

Но второй способ обычно используют с нестандартными библиотеками.

Автор: RAN 14.9.2003, 21:53
Baa, минута в минуту. Правильно, можно и так.
Только работать всё равно не будет в программе ошибки.

Автор: NiJazz 15.9.2003, 15:58
RAN, а какие именно ошибки? Ну то, что файл не открыт был для записи - не суть. Дело в том, что exe-файл создался, но выдаёт ошибку такую: "Инструкция по адресу "0x00401241" обратилась к памяти по адресу "0xcccccccc". Память не может быть "written". Что это такое?

Автор: Baa 15.9.2003, 17:01
Посмотри в отладчике, в каком месте она у тебя вылетает, и исправь smile.gif

Автор: mr.DUDA 15.9.2003, 21:51
Куда-то ты пишешь по указателю, который не проинициализирован (ни на что конкретное не показывает) - первая мысль, пришедшая в голову. smile.gif

Автор: RAN 15.9.2003, 22:05
mr.DUDA тебе уже одну ошибку указал. Другая ошибка, это использование L"......" в fwprintf. Эта функция работает с char*, поэтому она получит пустую строку (так как первый байт будет 0). Тебе надо перевести pBuf->grui0_name в char*, а потом char* передать в fwprintf.

Автор: RAN 15.9.2003, 22:10
И ещё. Я никогда не пользовался NetUserGetGroups, но из описания понял, что он возвращает в EntriesRead кол-во записей. Если там, то в for условие должно быть <, а не <= (или index = 1, а не 0).

Может ещё что-то...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)