[ Burgos @ 06.04.2005. 16:47 ] @
Nece nikako da se prebaci. Samo prvi znak uspe... Code: #include <afxwin.h> #include <oleauto.h> #include "Winsock2.h" // This header file has been added in addition to the wizard // generated code. extern "C" __declspec(dllexport) BSTR Enumerate() { CString strTemp; // CListBox *pList = (CListBox*) GetDlgItem(IDC_LIST1); struct hostent *host; struct in_addr *ptr; // To retrieve the IP Address DWORD dwScope = RESOURCE_CONTEXT; NETRESOURCE *NetResource = NULL; HANDLE hEnum; WNetOpenEnum( dwScope, NULL, NULL, NULL, &hEnum ); WSADATA wsaData; WSAStartup(MAKEWORD(1,1),&wsaData); if ( hEnum ) { DWORD Count = 0xFFFFFFFF; DWORD BufferSize = 2048; LPVOID Buffer = new char[2048]; WNetEnumResource( hEnum, &Count, Buffer, &BufferSize ); NetResource = (NETRESOURCE*)Buffer; char szHostName[200]; for ( unsigned int i = 0; i < BufferSize/sizeof(NETRESOURCE); i++, NetResource++ ) { if ( NetResource->dwUsage == RESOURCEUSAGE_CONTAINER && NetResource->dwType == RESOURCETYPE_ANY ) { if ( NetResource->lpRemoteName ) { CString strFullName = NetResource->lpRemoteName; if ( 0 == strFullName.Left(2).Compare("\\\\") ) strFullName = strFullName.Right(strFullName.GetLength()-2); gethostname( szHostName, strlen( szHostName ) ); host = gethostbyname(strFullName); ptr = (struct in_addr *) host->h_addr_list[0]; int a = ptr->S_un.S_un_b.s_b1; // Eg. 211.40.35.76 split up like this. int b = ptr->S_un.S_un_b.s_b2; // 40 int c = ptr->S_un.S_un_b.s_b3; // 35 int d = ptr->S_un.S_un_b.s_b4; // 76 strTemp.Format("%s --> %d.%d.%d.%d",strFullName,a,b,c,d); strTemp+="|?*?|"; MessageBox(NULL,strTemp,NULL,NULL); } } } delete Buffer; WNetCloseEnum( hEnum ); } WSACleanup(); BSTR Return = strTemp.AllocSysString; MessageBox(NULL,(LPCSTR)Return,NULL,NULL); return SysAllocString((BSTR) Return); } Potrebne biblioteke: Mpr.lib ws2_32.lib |