Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Помогите разобраться с библиотекой

58K
31 мая 2010 года
friZur
9 / / 31.05.2010
Делаю курсач в Dev C++ версия 4.9.9.2, выскакиевает ошибка при компиляции, предпологаю что не подключены библиотеки но не уверен... Подскажите пожалуйста :(

Вот код:

Код:
#include <windows.h>
#include <stdio.h>

int main()
   {
DWORD dwResult;
HANDLE hEnum;
DWORD cbBuffer = 16384;
DWORD cEntries = 0xFFFFFFFF;
LPNETRESOURCE lpnrDrv;
DWORD i;

dwResult = WNetOpenEnum( RESOURCE_CONNECTED,
                               RESOURCETYPE_ANY,
                               0,
                               NULL,
                               &hEnum );

      if (dwResult != NO_ERROR)
      {
         printf( "\nCannot enumerate network drives.\n" );
         return 0;
      }

      printf( "\nNetwork drives:\n\n" );

      do
      {
         lpnrDrv = (LPNETRESOURCE) GlobalAlloc( GPTR, cbBuffer );

         dwResult = WNetEnumResource( hEnum, &cEntries, lpnrDrv, &cbBuffer
   );

         if (dwResult == NO_ERROR)
         {
            for( i = 0; i < cEntries; i++ )
            {
               if( lpnrDrv.lpLocalName != NULL )
               {
                  printf( "%s\t%s\n", lpnrDrv.lpLocalName,
                                      lpnrDrv.lpRemoteName );
               }
            }
         }
         else if( dwResult != ERROR_NO_MORE_ITEMS )
         {
            printf( "Cannot complete network drive enumeration" );
            GlobalFree( (HGLOBAL) lpnrDrv );
            break;
         }
         GlobalFree( (HGLOBAL) lpnrDrv );
      }
      while( dwResult != ERROR_NO_MORE_ITEMS );

      WNetCloseEnum(hEnum);
   }

Ошибки которые выскакивают:
 [Linker error] undefined reference to `WNetOpenEnumA@20'
  [Linker error] undefined reference to `WNetEnumResourceA@16'
  [Linker error] undefined reference to `WNetCloseEnum@4'
  ld returned 1 exit status
2.1K
31 мая 2010 года
Norgat
452 / / 12.08.2009
во первых - читай правила форума и оформи код тегами CODE

во вторых....

Цитата:
5 D:\Documents and Settings\Admin\Рабочий стол\Безымянный1.cpp `main' must return `int'



компилятор пишет, что main должна возвращать int... очевидно Dev C++ использует в качестве компилятора gcc, так?
если так, что вместо void main() нужно int main() и сделать return 0; в конце программы.

58K
31 мая 2010 года
friZur
9 / / 31.05.2010
Цитата: Norgat
компилятор пишет, что main должна возвращать int... очевидно Dev C++ использует в качестве компилятора gcc, так?


угу

Цитата: Norgat
если так, что вместо void main() нужно int main() и сделать return 0; в конце программы.



изменил, эта проблема ушла появилась новая:(

2.1K
31 мая 2010 года
Norgat
452 / / 12.08.2009
нутк пиши, что выводит компилятор... экстрасенсы все спят уже...
58K
31 мая 2010 года
friZur
9 / / 31.05.2010
 
Код:
[Linker error] undefined reference to `WNetOpenEnumA@20'
[Linker error] undefined reference to `WNetEnumResourceA@16'
[Linker error] undefined reference to `WNetCloseEnum@4'
ld returned 1 exit status
2.1K
31 мая 2010 года
Norgat
452 / / 12.08.2009
Цитата:
[Linker error] undefined reference to `WNetOpenEnumA@20'



не видит WNetOpenEnumA... судя по MSDN ( http://msdn.microsoft.com/en-us/library/aa385478(VS.85).aspx ) для неё нужно подключать хидер Winnetwk.h

подключай #include <Winnetwk.h> вообщем...

58K
31 мая 2010 года
friZur
9 / / 31.05.2010
в процессе
с хидером ничего не изменилось
попробовал добавить библиотеку #include <Mpr.lib>
ошибки все исчезли но путь к ней не могу задать, вернее не совсем понимаю где ставить

зы. заранее извиняюсь если где туплю, работаю обычно в делфи, за си недавно взялся. Язык интересный, но много пробелов у меня еще, пытаюсь наверствывать
2.1K
31 мая 2010 года
Norgat
452 / / 12.08.2009
да... забыс совсем про либу... в Dev C++ никогда не работал, нашёл в инете такое:

http://www.uniqueness-template.com/devcpp/

Project Option -> Parametrs -> Linker
туда нужно добавить эту библиотеку... а вот путь не подскажу увы...

там картинка есть ещё... на ней есть скажем -lbgi это равносильно libbgi.lib
попробуй добавить туда просто Mpr.lib
58K
31 мая 2010 года
friZur
9 / / 31.05.2010
ща ссыль изучу

библиотеку нашел
она наз libmpr.a тут вроде
подключил (#include <libmpr.a>)
пишет \Documents and Settings\Admin\Рабочий стол\ololo\Безымянный1.cpp D:\Documents and Settings\Admin\Рабочий стол\ololo\D libmpr.a: No such file or directory.
мол не находит, уже отдельно перенес ее в папку с проектом
2.1K
31 мая 2010 года
Norgat
452 / / 12.08.2009
нет, нет, нет... чтобы подключить статическую библиотеку(lib), нужно сделать 2 вещи:

1) подключить её хидер(я так понимаю что в этом случае это Winnetwk.h, т.е. в исходный код добавить #include <Winnetwk.h>)

2) подключить саму библиотеку... если библиотека называется libmpr.a, то тебе нужно добавить её в Project Option -> Parametrs -> Linker как -lmpr
58K
31 мая 2010 года
friZur
9 / / 31.05.2010
и прокомпилировалось и выполнилось)
интересное одно) при выполнение exe моргает на доли секунды и исчезает...
58K
31 мая 2010 года
friZur
9 / / 31.05.2010
вот то что получилось в конце
не срабатывает вывод почему то
Код:
#include <windows.h>
#include <stdio.h>
#include <Winnetwk.h>
#include <cstdio>


   int main()
   {  char c1;
      DWORD dwResult;
      HANDLE hEnum;
      DWORD cbBuffer = 16384;
      DWORD cEntries = 0xFFFFFFFF;
      LPNETRESOURCE lpnrDrv;
      DWORD i;
     


      dwResult = WNetOpenEnum( RESOURCE_CONNECTED,
                               RESOURCETYPE_ANY,
                               0,
                               NULL,
                               &hEnum );

      if (dwResult != NO_ERROR)
      {
         printf( "\nCannot enumerate network drives.\n" );
         return 0;
      }

      printf( "\nNetwork drives:\n\n" );

      do
      {
         lpnrDrv = (LPNETRESOURCE) GlobalAlloc( GPTR, cbBuffer );

         dwResult = WNetEnumResource( hEnum, &cEntries, lpnrDrv, &cbBuffer
   );

         if (dwResult == NO_ERROR)
         {
            for( i = 0; i < cEntries; i++ )
            {
               if( lpnrDrv.lpLocalName != NULL )
               {
                  printf( "%s\t%s\n", lpnrDrv.lpLocalName,
                                      lpnrDrv.lpRemoteName );
               }
            }
         }
         else if( dwResult != ERROR_NO_MORE_ITEMS )
         {
            printf( "Cannot complete network drive enumeration" );
            GlobalFree( (HGLOBAL) lpnrDrv );
            break;
         }
         GlobalFree( (HGLOBAL) lpnrDrv );
      }
      while( dwResult != ERROR_NO_MORE_ITEMS );

      WNetCloseEnum(hEnum);
   }
   printf( "input char >" );
   scanf( "%c",  &c1 );
   printf( " %c\n",  c1 );
   }


62 D:\Documents and Settings\Admin\Рабочий стол\ppc\main.cpp expected constructor, destructor, or type conversion before '(' token
62 D:\Documents and Settings\Admin\Рабочий стол\ppc\main.cpp expected `,' or `;' before '(' token

на последних строках эти ошибки, что-то ему не нравится(
58K
31 мая 2010 года
friZur
9 / / 31.05.2010
вот готовый, рабочий код

Код:
#include <windows.h>
#include <stdio.h>
#include <Winnetwk.h>
#include <cstdio>


   int main()
      {  char c1;
      DWORD dwResult;
      HANDLE hEnum;
      DWORD cbBuffer = 16384;
      DWORD cEntries = 0xFFFFFFFF;
      LPNETRESOURCE lpnrDrv;
      DWORD i;
     


      dwResult = WNetOpenEnum( RESOURCE_CONNECTED,
                               RESOURCETYPE_ANY,
                               0,
                               NULL,
                               &hEnum );

      if (dwResult != NO_ERROR)
      {
         printf( "\nCannot enumerate network drives.\n" );
         return 0;
      }

      printf( "\nNetwork drives:\n\n" );

      do
      {
         lpnrDrv = (LPNETRESOURCE) GlobalAlloc( GPTR, cbBuffer );

         dwResult = WNetEnumResource( hEnum, &cEntries, lpnrDrv, &cbBuffer
   );

         if (dwResult == NO_ERROR)
         {
            for( i = 0; i < cEntries; i++ )
            {
               if( lpnrDrv.lpLocalName != NULL )
               {
                  printf( "%s\t%s\n", lpnrDrv.lpLocalName,
                                      lpnrDrv.lpRemoteName );
               }
            }
         }
         else if( dwResult != ERROR_NO_MORE_ITEMS )
         {
            printf( "Cannot complete network drive enumeration" );
            GlobalFree( (HGLOBAL) lpnrDrv );
            break;
         }
         GlobalFree( (HGLOBAL) lpnrDrv );
      }
      while( dwResult != ERROR_NO_MORE_ITEMS );

      WNetCloseEnum(hEnum);
   printf( "input char >" );
   scanf( "%c",  &c1 );
   printf( " %c\n",  c1 );
   return 0;
   }


прога запускается но выводит только

Network Drivers:

Input Char >

все, сетевые подключения не отображает.... почему понять не могу, где промах допустил в самом коде...
2.1K
31 мая 2010 года
Norgat
452 / / 12.08.2009
http://forum.codenet.ru/showthread.php?t=27443 вот тут работающий код с WNetOpenEnum (со слов автора поста, сам не проверял)

посмотри, подгони под свои нужды)
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог