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);返回的名字不对啊

解决方案 »

  1.   

    int gethostname(
      char FAR *name,  
      int namelen       
    );
    获取主机名用这个函数就可以了。
      

  2.   

    等下,看错了题目。取主机名用
    BOOL WINAPI GetComputerNameEx(
      __in     COMPUTER_NAME_FORMAT NameType,
      __out    LPTSTR lpBuffer,
      __inout  LPDWORD lpnSize
    );
      

  3.   

    你要获得什么主机的名字?MSDN上的例子
    #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);
        }
    }
      

  4.   

    //unicode工程?
    TCHAR Buffer[MAX_COMPUTERNAME_LENGTH + 1]; 
      

  5.   

    char Buffer[MAX_COMPUTERNAME_LENGTH + 1]; GetComputerName((LPWSTR)Buffer,&nSize); //这里获得的主机名不正确 下面函数用的是UNICODE版本,上面buffer定义的是ANSI...混乱阿
      

  6.   

    getcomputername不是获得主机名吧  是计算机名gethostbyname  才是主机名啊  
      

  7.   

    Unicode是比较麻烦,有些API传参是char*类型,很容易乱码。
      

  8.   

    菜单(项目)-》xxx属性-》配置常规属性-》常规-》字符集-》不用Unicode,用多字符集。
    以上是VS2008,VC6等的方法不同,只要使工程不使用Unicode字符集。然后统一调用不带W的函数就行。