CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  硬件/系统

再问VC基础问题,抓狂ing……API调用无效……

楼主ccat(智拙)2003-11-04 17:54:10 在 VC/MFC / 硬件/系统 提问

这样子一个简单程序,只是读当前计算机的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”:   即使使用参数相关的查找,也未找到标识符  
   
  问题点数:300、回复次数:13Top

1 楼ifengfeng(fengfeng)回复于 2003-11-04 18:21:33 得分 5

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

2 楼ljzcom()回复于 2003-11-04 18:25:23 得分 0

UP  
  Top

3 楼jiangsheng(蒋晟.Net[MVP])回复于 2003-11-04 18:27:24 得分 90

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

4 楼mfc168(子非鱼)回复于 2003-11-04 18:29:54 得分 5

agree   jiangsheng(蒋晟.Net)Top

5 楼NowCan(城市浪人)回复于 2003-11-04 19:06:36 得分 90

#define   WINNT   0x0500Top

6 楼bluebohe(薄荷)回复于 2003-11-04 19:16:12 得分 5

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

7 楼sxxny(轻云(Srj))回复于 2003-11-04 19:36:02 得分 5

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

8 楼ccat(智拙)回复于 2003-11-05 03:20:32 得分 0

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

9 楼ccat(智拙)回复于 2003-11-05 03:23:05 得分 0

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

10 楼shines(郭子)回复于 2003-11-05 04:11:01 得分 90

#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;  
  }Top

11 楼ccat(智拙)回复于 2003-11-05 04:44:06 得分 0

搞定了,在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以前的计算机上得到域名信息好吗?谢谢!Top

12 楼duyhui(一天到晚游泳的鱼)回复于 2003-11-05 09:05:25 得分 0

学习!Top

13 楼yintongshun(左岸思雨)回复于 2003-11-05 09:16:55 得分 10

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

相关问题

  • VC里调用api出错
  • api在vc 中如何调用?
  • VC下调用API函数的问题.
  • 在VC里怎么调用API?
  • 在VC里调用API函数
  • vc中怎样调用API(不用mfc)
  • vc如何调用api函数
  • Api调用
  • api调用
  • 请问各位大哥,在VC中怎么调用API函数?

关键词

  • win32
  • computer
  • getcomputernameex
  • bufferlen
  • nametype
  • lpdword lpnsize
  • buffer
  • lpbuffer
  • tchar
  • format

得分解答快速导航

  • 帖主:ccat
  • ifengfeng
  • jiangsheng
  • mfc168
  • NowCan
  • bluebohe
  • sxxny
  • shines
  • yintongshun

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo