如何在VS 2017 C ++ Win32应用程序中打印gethostname结果?

时间:2017-04-12 05:05:27

标签: c++ winapi desktop-application

我正在尝试创建一个Win32桌面应用程序,它只打印出运行它的计算机的主机名。我已经设法使用WSADATA结构和gethostname()创建这样一个C ++控制台应用程序,工作正常。但是,当我尝试在我的Win32桌面应用程序中实现它们时,它根本不起作用。

查看错误消息,指出TCHAR - char不兼容/转换问题...有关如何使此应用程序正常工作的任何建议?

win32project.cpp:

ancestry.filter(function(person) { return byName[person.mother] != null;})

上面win32project.cpp中包含的stdafx.h的内容:

function ageDiff(p) { return p.born - p.mother.born } //p.mother.born doesn't work 

1 个答案:

答案 0 :(得分:0)

如果您read the documentation(或只是查看函数声明),您会看到gethostname()不接受TCHAR输出缓冲区,只接受char缓冲区。如果在启用Unicode的情况下编译项目,TCHAR将映射到wchar_t。这就是您的代码无法编译的原因。因此,将TCHAR更改为char,并直接使用TextOutA()

char szName[256] = "";
gethostname(szName, 256);
TextOutA(hdc, 10, 10, szName, strlen(szName));

否则,请考虑改为使用GetComputerName()

TCHAR szName[MAX_COMPUTERNAME_LENGTH + 1] = TEXT("");
DWORD dwLen = sizeof(szName) / sizeof(TCHAR);
if (!GetComputerName(szName, &dwLen)) dwLen = 0;
TextOut(hdc, 10, 10, szName, dwLen);

或者更好,只需删除TCHAR(你真的需要支持Win9x / ME吗?)并直接使用wchar_t

WCHAR szName[MAX_COMPUTERNAME_LENGTH + 1] = L"";
DWORD dwLen = sizeof(szName) / sizeof(WCHAR);
if (!GetComputerNameW(szName, &dwLen)) dwLen = 0;
TextOutW(hdc, 10, 10, szName, dwLen);