我正在尝试创建一个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
答案 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);