| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > 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 |
| Посмотри в отладчике, в каком месте она у тебя вылетает, и исправь |
| Автор: mr.DUDA 15.9.2003, 21:51 |
| Куда-то ты пишешь по указателю, который не проинициализирован (ни на что конкретное не показывает) - первая мысль, пришедшая в голову. |
| Автор: 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). Может ещё что-то... |