Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Список сетевых компьютеров в C++ Builder


lightix ©   (2004-05-16 17:44:00) 

Нашел в FAQ'e пример для поиска сетевых компьютеров написанный в Delphi. Пытаюсь подогнать его для использования в C++ Builder и никак не получается - при компиляции ругается на несоотвествие типов данных и т.п.
Поджскажите в чем моя ошибка?


 THandle EnumHandle;
 TNetResource WorkgroupRS;
 TNetResource Buf[500];
 Word BufSize;
 Word Entries;
 Word Result;

 WorkgroupRS.dwScope = 2;
 WorkgroupRS.dwType = 3;
 WorkgroupRS.dwDisplayType = 1;
 WorkgroupRS.dwUsage = 2;
 WorkgroupRS.lpRemoteName = &Workgroup[0];

 WNetOpenEnum( RESOURCE_GLOBALNET,
               RESOURCETYPE_ANY,
               0,
               &WorkgroupRS,
               &EnumHandle); // Вот здесь выдает ошибку
/*
[C++ Error] unetsearchclient.cpp(107): E2034 Cannot convert 'unsigned int *' to 'void * *'
[C++ Error] unetsearchclient.cpp(107): E2342 Type mismatch in parameter 'lphEnum' (wanted 'void * *', got 'unsigned int *')
*/

do
{
 Entries =1;
 BufSize = sizeof(Buf);
 Result =
          WNetEnumResource( EnumHandle,
                            Entries,
                            &Buf,
                            &BufSize ); // И вот здесь тоже
/*
[C++ Error] unetsearchclient.cpp(116): E2034 Cannot convert 'unsigned int' to 'void *'
[C++ Error] unetsearchclient.cpp(116): E2342 Type mismatch in parameter 'hEnum' (wanted 'void *', got 'unsigned int')
[C++ Error] unetsearchclient.cpp(116): E2034 Cannot convert 'int' to 'unsigned long *'
[C++ Error] unetsearchclient.cpp(116): E2342 Type mismatch in parameter 'lpcCount' (wanted 'unsigned long *', got 'unsigned short')
[C++ Error] unetsearchclient.cpp(116): E2034 Cannot convert 'unsigned short *' to 'unsigned long *'
[C++ Error] unetsearchclient.cpp(116): E2342 Type mismatch in parameter 'lpBufferSize' (wanted 'unsigned long *', got 'unsigned short *')
*/
  if (Result == NO_ERROR&&Entries == 1)
  {
  Memo1->Lines->Add(AnsiString(Buf[1].lpRemoteName));
  }
} while (Entries!=1||Result!=NO_ERROR);

WNetCloseEnum( EnumHandle ); //И здесь тоже ошибка
/*
[C++ Error] unetsearchclient.cpp(123): E2034 Cannot convert 'unsigned int' to 'void *'
[C++ Error] unetsearchclient.cpp(123): E2342 Type mismatch in parameter 'hEnum' (wanted 'void *', got 'unsigned int')
[C++ Warning] unetsearchclient.cpp(125): W8004 'BufSize' is assigned a value that is never used
*/


Rouse_   (2004-05-16 18:10:00) [1]

BOOL WINAPI EnumerateFunc(HWND hwnd,
                         HDC hdc,
                         LPNETRESOURCE lpnr)
{
 DWORD dwResult, dwResultEnum;
 HANDLE hEnum;
 DWORD cbBuffer = 16384;      // 16K is a good size
 DWORD cEntries = -1;         // enumerate all possible entries
 LPNETRESOURCE lpnrLocal;     // pointer to enumerated structures
 DWORD i;
 //
 // Call the WNetOpenEnum function to begin the enumeration.
 //
 dwResult = WNetOpenEnum(RESOURCE_GLOBALNET, // all network resources
                         RESOURCETYPE_ANY,   // all resources
                         0,        // enumerate all resources
                         lpnr,     // NULL first time the function is called
                         &hEnum);  // handle to the resource

 if (dwResult != NO_ERROR)
 {  
   //
   // Process errors with an application-defined error handler.
   //
   NetErrorHandler(hwnd, dwResult, (LPSTR)"WNetOpenEnum");
   return FALSE;
 }
 //
 // Call the GlobalAlloc function to allocate resources.
 //
 lpnrLocal = (LPNETRESOURCE) GlobalAlloc(GPTR, cbBuffer);
 
 do
 {  
   //
   // Initialize the buffer.
   //
   ZeroMemory(lpnrLocal, cbBuffer);
   //
   // Call the WNetEnumResource function to continue
   //  the enumeration.
   //
   dwResultEnum = WNetEnumResource(hEnum,      // resource handle
                                   &cEntries,  // defined locally as -1
                                   lpnrLocal,  // LPNETRESOURCE
                                   &cbBuffer); // buffer size
   //
   // If the call succeeds, loop through the structures.
   //
   if (dwResultEnum == NO_ERROR)
   {
     for(i = 0; i < cEntries; i++)
     {
       // Call an application-defined function to
       //  display the contents of the NETRESOURCE structures.
       //
       DisplayStruct(hdc, &lpnrLocal[i]);

       // If the NETRESOURCE structure represents a container resource,
       //  call the EnumerateFunc function recursively.

       if(RESOURCEUSAGE_CONTAINER == (lpnrLocal[i].dwUsage
                                      & RESOURCEUSAGE_CONTAINER))
         if(!EnumerateFunc(hwnd, hdc, &lpnrLocal[i]))
           TextOut(hdc, 10, 10, "EnumerateFunc returned FALSE.", 29);
     }
   }
   // Process errors.
   //
   else if (dwResultEnum != ERROR_NO_MORE_ITEMS)
   {
     NetErrorHandler(hwnd, dwResultEnum, (LPSTR)"WNetEnumResource");
     break;
   }
 }
 //
 // End do.
 //
 while(dwResultEnum != ERROR_NO_MORE_ITEMS);
 //
 // Call the GlobalFree function to free the memory.
 //
 GlobalFree((HGLOBAL)lpnrLocal);
 //
 // Call WNetCloseEnum to end the enumeration.
 //
 dwResult = WNetCloseEnum(hEnum);
 
 if(dwResult != NO_ERROR)
 {
   //
   // Process errors.
   //
   NetErrorHandler(hwnd, dwResult, (LPSTR)"WNetCloseEnum");
   return FALSE;
 }

 return TRUE;
}


Rouse_   (2004-05-16 18:08:00) [2]

DWORD WNetOpenEnum(
 DWORD dwScope,                // scope of enumeration
 DWORD dwType,                 // resource types to list
 DWORD dwUsage,                // resource usage to list
 LPNETRESOURCE lpNetResource,  // resource structure
 LPHANDLE lphEnum              // enumeration handle buffer
);

DWORD WNetEnumResource(
 HANDLE hEnum,          // handle to enumeration
 LPDWORD lpcCount,      // entries to list
 LPVOID lpBuffer,       // buffer
 LPDWORD lpBufferSize   // buffer size
);

DWORD WNetCloseEnum(
 HANDLE hEnum   // handle to enumeration
);


Наверх

Титульная страница Поиск, карта сайта Написать письмо