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

ccat 2003-11-04 05:54:10
这样子一个简单程序,只是读当前计算机的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”: 即使使用参数相关的查找,也未找到标识符

...全文
141 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
yintongshun 2003-11-05
  • 打赏
  • 举报
回复
我给你说的地址吧:http://www.longen.org/SRC.htm在下面源代码部分有个:DNS的实现 例子,分两部分,很不错。
duyhui 2003-11-05
  • 打赏
  • 举报
回复
学习!
ccat 2003-11-05
  • 打赏
  • 举报
回复
搞定了,在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以前的计算机上得到域名信息好吗?谢谢!
shines77 2003-11-05
  • 打赏
  • 举报
回复
#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;
}
ccat 2003-11-05
  • 打赏
  • 举报
回复
对了,我用的VC7.1,还有就是查过编译器指令了,编译时包含的库里有Kernel32.lib
ccat 2003-11-05
  • 打赏
  • 举报
回复
ifengfeng:我不需要GetComputerName(),因为我必须要计算机的DNS名。当然,有一个变通,如果有什么办法可以直接得到当前计算机所处的域就好啦。
其他各位:各们的办法都试过了,还是老毛病,找不到这个函数……
其实在IDLE里直接查找声明就找到啦,不知道为什么编译器就是不认。
sxxny 2003-11-04
  • 打赏
  • 举报
回复
自己在前面声明一下
BOOL GetComputerNameEx(
COMPUTER_NAME_FORMAT NameType, // name type
LPTSTR lpBuffer, // name buffer
LPDWORD lpnSize // size of name buffer
);

然后把Kernel32.lib包含进你的工程.
bluebohe 2003-11-04
  • 打赏
  • 举报
回复
这个函数应该需要新的sdk库,在VC的头文件目录中是找不到这个函数的,就像前几天碰到的一个关于线程池的函数
.net框架里面VC7的winbase.h里面有定义
NowCan 2003-11-04
  • 打赏
  • 举报
回复
#define WINNT 0x0500
mfc168 2003-11-04
  • 打赏
  • 举报
回复
agree jiangsheng(蒋晟.Net)
蒋晟 2003-11-04
  • 打赏
  • 举报
回复
GetComputerNameEx是NT5(Win2000)以上才支持的,所以你要定义WIN_NT为5或者更高的值
ljzcom 2003-11-04
  • 打赏
  • 举报
回复
UP
ifengfeng 2003-11-04
  • 打赏
  • 举报
回复
char buffer[255];
DWORD bufferLen = 255;
GetComputerName(buffer, &bufferLen);
AfxMessageBox(buffer);

2,644

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 硬件/系统
社区管理员
  • 硬件/系统社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧