c++ - 混合 C++ 标准字符串和 Windows API

标签 c++ windows

许多 Windows API 使用指向缓冲区的指针和大小元素,但结果需要放入 C++ 字符串中。 (我在这里使用的是 windows unicode,所以它们是 wstrings)

这是一个例子:-

#include <iostream>
#include <string>
#include <vector>
#include <windows.h>

using namespace std;

// This is the method I'm interested in improving ...
wstring getComputerName()
{
    vector<wchar_t> buffer;
    buffer.resize(MAX_COMPUTERNAME_LENGTH+1);
    DWORD size = MAX_COMPUTERNAME_LENGTH;

    GetComputerNameW(&buffer[0], &size);

    return wstring(&buffer[0], size);
}

int main()
{
    wcout << getComputerName() << "\n";
}

我的问题确实是,这是编写 getComputerName 函数以使其更好地适应 C++ 的最佳方法吗,还是有更好的方法?除非我错过了什么,否则我看不出有什么方法可以直接使用字符串而不通过 vector 吗?它工作正常,但不知何故看起来有点难看。问题不在于那个特定的 API,它只是一个方便的示例。

最佳答案

在这种情况下,我看不到 std::vector 带来了什么。 MAX_COMPUTERNAME_LENGTH 不太可能很大,所以我会简单地使用 C 风格的数组作为临时缓冲区。

关于c++ - 混合 C++ 标准字符串和 Windows API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2437937/

相关文章:

c++ - 在 C++ 中计算 Sprite 的坐标

c++ - 与linux和windows c++兼容的共享内存库

javascript - Windows 小工具 : Testing environment?

windows - Batch Then此时出乎意料

c# - 切换 RIDEV_CAPTUREMOUSE 时的奇怪行为 | RIDEV_NOLEGACY

C++ - 返回 C++11 std::array

c++ - 如何将最终迭代添加到 while 循环?

c++ - 在 C++ 中重载乘法运算符

c++ - Boost spirit 2.5.2 独立版

windows - 将文件夹结构和子目录/文件导出到文本