CString strAddr = _T("");
DWORD nSize = MAX_COMPUTERNAME_LENGTH + 1;
char Buffer[MAX_COMPUTERNAME_LENGTH + 1];
GetComputerName((LPWSTR)Buffer,&nSize); //这里获得的主机名不正确
struct hostent* pHostIP;
pHostIP = gethostbyname(Buffer);
if (pHostIP == NULL)
{
MessageBox(_T("无法获得IP."));
return FALSE;
} for(int i=0;i<4;i++)
{
CString addr;
if(i > 0)
{
strAddr += ".";
}
addr.Format(_T("%u"),(unsigned int)((unsigned char*)pHostIP->h_addr_list[0])[i]);
strAddr += addr;
}
WSAGetLastError 返回的代码是11001 //找不到主机名请问为什么GetComputerName((LPWSTR)Buffer,&nSize);返回的名字不对啊
DWORD nSize = MAX_COMPUTERNAME_LENGTH + 1;
char Buffer[MAX_COMPUTERNAME_LENGTH + 1];
GetComputerName((LPWSTR)Buffer,&nSize); //这里获得的主机名不正确
struct hostent* pHostIP;
pHostIP = gethostbyname(Buffer);
if (pHostIP == NULL)
{
MessageBox(_T("无法获得IP."));
return FALSE;
} for(int i=0;i<4;i++)
{
CString addr;
if(i > 0)
{
strAddr += ".";
}
addr.Format(_T("%u"),(unsigned int)((unsigned char*)pHostIP->h_addr_list[0])[i]);
strAddr += addr;
}
WSAGetLastError 返回的代码是11001 //找不到主机名请问为什么GetComputerName((LPWSTR)Buffer,&nSize);返回的名字不对啊
char FAR *name,
int namelen
);
获取主机名用这个函数就可以了。
BOOL WINAPI GetComputerNameEx(
__in COMPUTER_NAME_FORMAT NameType,
__out LPTSTR lpBuffer,
__inout LPDWORD lpnSize
);
#define _WIN32_WINNT 0x0500#include <windows.h>
#include <stdio.h>
#include <tchar.h>void _tmain(void)
{
TCHAR buffer[256] = TEXT("");
TCHAR szDescription[8][32] = {TEXT("NetBIOS"),
TEXT("DNS hostname"),
TEXT("DNS domain"),
TEXT("DNS fully-qualified"),
TEXT("Physical NetBIOS"),
TEXT("Physical DNS hostname"),
TEXT("Physical DNS domain"),
TEXT("Physical DNS fully-qualified")};
int cnf = 0;
DWORD dwSize = sizeof(buffer);
for (cnf = 0; cnf < ComputerNameMax; cnf++)
{
if (!GetComputerNameEx(
(COMPUTER_NAME_FORMAT)cnf, buffer, &dwSize))
{
_tprintf(TEXT("GetComputerNameEx failed (%d)\n"),
GetLastError());
return;
}
else _tprintf(TEXT("%s: %s\n"), szDescription[cnf], buffer); dwSize = sizeof(buffer);
ZeroMemory(buffer, dwSize);
}
}
TCHAR Buffer[MAX_COMPUTERNAME_LENGTH + 1];
以上是VS2008,VC6等的方法不同,只要使工程不使用Unicode字符集。然后统一调用不带W的函数就行。