混合c ++标准字符串和windows API

jco*_*der 3 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";
}
Run Code Online (Sandbox Code Playgroud)

我的问题是,这是编写getComputerName函数的最佳方法,以便它更好地适应C++,还是有更好的方法?除非我错过了什么,否则我没有看到任何方式直接使用字符串而不通过向量?它工作正常,但不知何故看起来有点难看.问题不在于特定的API,它只是一个方便的例子.

小智 7

在这种情况下,我没有看到std :: vector为聚会带来了什么.MAX_COMPUTERNAME_LENGTH可能不是很大,所以我只想使用C风格的数组作为临时缓冲区.