再问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”: 即使使用参数相关的查找,也未找到标识符

...全文
64 点赞 收藏 13
写回复
13 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
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);
回复
相关推荐
发帖
硬件/系统
创建于2007-09-28

2594

社区成员

VC/MFC 硬件/系统
申请成为版主
帖子事件
创建了帖子
2003-11-04 05:54
社区公告
暂无公告