许多 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/