这样子一个简单程序,只是读当前计算机的DNS名,但,GetComputerNameEx调用出错……// System.cpp : 定义控制台应用程序的入口点。
//#include "stdafx.h"
#include <Windows.h>DWORD BufferLen = 1024;
LPCTSTR Buffer = new char[1024];
int _tmain(int argc, _TCHAR* argv[])
{
if (!GetComputerNameEx(2, Buffer, & BufferLen)){
return 1;} std::cout<<Buffer;
system("PAUSE");
return 0;
}
e:\Projects\sysinfo\System\System.cpp(15): error C3861: “GetComputerNameEx”: 即使使用参数相关的查找,也未找到标识符

解决方案 »

  1.   

    char buffer[255];
    DWORD bufferLen = 255;
    GetComputerName(buffer, &bufferLen);
    AfxMessageBox(buffer);
      

  2.   

    GetComputerNameEx是NT5(Win2000)以上才支持的,所以你要定义WIN_NT为5或者更高的值
      

  3.   

    这个函数应该需要新的sdk库,在VC的头文件目录中是找不到这个函数的,就像前几天碰到的一个关于线程池的函数
    .net框架里面VC7的winbase.h里面有定义
      

  4.   

    自己在前面声明一下
    BOOL GetComputerNameEx(
      COMPUTER_NAME_FORMAT NameType,  // name type
      LPTSTR lpBuffer,                // name buffer
      LPDWORD lpnSize                 // size of name buffer
    );然后把Kernel32.lib包含进你的工程.
      

  5.   

    ifengfeng:我不需要GetComputerName(),因为我必须要计算机的DNS名。当然,有一个变通,如果有什么办法可以直接得到当前计算机所处的域就好啦。
    其他各位:各们的办法都试过了,还是老毛病,找不到这个函数……
    其实在IDLE里直接查找声明就找到啦,不知道为什么编译器就是不认。
      

  6.   

    对了,我用的VC7.1,还有就是查过编译器指令了,编译时包含的库里有Kernel32.lib
      

  7.   

    #include <Winbase.h>   //记得定义DWORD BufferLen = 1024;
    TCHAR Buffer[1024];//函数声明
    typedef enum _COMPUTER_NAME_FORMAT {
      ComputerNameNetBIOS,
      ComputerNameDnsHostname,
      ComputerNameDnsDomain,
      ComputerNameDnsFullyQualified,
      ComputerNamePhysicalNetBIOS,
      ComputerNamePhysicalDnsHostname,
      ComputerNamePhysicalDnsDomain,
      ComputerNamePhysicalDnsFullyQualified,
      ComputerNameMax
    } COMPUTER_NAME_FORMAT ;#ifdef __cplusplus
    extern "C" {
    #endif/*
    BOOL GetComputerNameEx(
      COMPUTER_NAME_FORMAT NameType,  // name type
      LPTSTR lpBuffer,                // name buffer
      LPDWORD lpnSize                 // size of name buffer
    );
    */WINBASEAPI
    BOOL
    WINAPI
    GetComputerNameExA (
      COMPUTER_NAME_FORMAT NameType,  // name type
      LPTSTR lpBuffer,                // name buffer
      LPDWORD lpnSize                 // size of name buffer
    );
    WINBASEAPI
    BOOL
    WINAPI
    GetComputerNameExW (
      COMPUTER_NAME_FORMAT NameType,  // name type
      LPTSTR lpBuffer,                // name buffer
      LPDWORD lpnSize                 // size of name buffer
    );
    #ifdef UNICODE
    #define GetComputerNameEx  GetComputerNameExW
    #else
    #define GetComputerNameEx  GetComputerNameExA
    #endif // !UNICODE#ifdef __cplusplus
    }
    #endif//调用的时候
    COMPUTER_NAME_FORMAT NameType = ComputerNameDnsHostname;
    if (!GetComputerNameEx(NameType, Buffer, &BufferLen))
    {
    return 1;
    }
      

  8.   

    搞定了,在Windows.h和Winbase.h的引用前面加上
    #define _WIN32_WINNT 0x0500
    宏就可以了
    #define _WIN32_WINNT 0x0500
    #include <Windows.h>
    #include <Winbase.h>#include "stdafx.h"DWORD BufferLen = 1024;
    LPSTR Buffer = new char[1024];int _tmain(int argc, _TCHAR* argv[])
    {
    if (!GetComputerNameEx(ComputerNameDnsDomain, Buffer, &BufferLen))
    {
    return 1;
    } cout<<Buffer;
    system("PAUSE");
    return 0;
    }谢谢郭子这么晚还陪我调程序,老规矩,大家同喜,过一两天散分
    下面大家讨论一下怎么在Windows 2000以前的计算机上得到域名信息好吗?谢谢!
      

  9.   

    我给你说的地址吧:http://www.longen.org/SRC.htm在下面源代码部分有个:DNS的实现 例子,分两部分,很不错。