c++ - 如何使用 std::vector 返回 WCHAR ** 参数?
问题描述
我有一个将参数之一设置为传出的函数。我需要将它与 std::vector 一起使用。
这是将文件名返回到声明为 WCHAR ** 的 *sFilename 的函数:
BOOL GetFilenameFromPathAndFilename(WCHAR *sFilenameAndPath, WCHAR **sFilename)
{
WCHAR *pDest;
// Count backwards to find the first backslash and take the right # of chars as the filename
pDest =wcsrchr(sFilenameAndPath,'\\');
if (pDest)
{
pDest++;
DWORD dwLen = (DWORD) _tcslen(pDest) + 1;
*sFilename = (WCHAR*)calloc(dwLen, sizeof(TCHAR));
StringCchCopy(*sFilename,dwLen, pDest);
}
return (pDest != 0);
}
如何将此函数与 std::vector 一起使用?使用 std::vector,调用不起作用:
std::vector<WCHAR> sFQDN(512);
//GetFQDomainNameEx(&sFQDN.data()); <-does not work
WCHAR *sFilenameIncoming = NULL;
GetFQDomainNameEx(&sFilenameIncoming); <-this works
解决方案
使用此函数,您必须传递一个指针变量,例如:
WCHAR *sFilenameIncoming;
GetFQDomainNameEx(&sFilenameIncoming); <-this works
然后,您可以将指向的数据复制sFilenameIncoming
到容器中,并释放分配。
//GetFQDomainNameEx(&sFQDN.data()); <-does not work
这不起作用,因为sFQDN.data()
它是一个右值,所以你不能取它的地址。
推荐阅读
- google-classroom - 课程 API 不返回材料集
- java - 如何在 Android Studio 中单击按钮时创建一个新按钮?
- wordpress - 如何将字体真棒添加到自定义文字新闻片段
- angularjs - AngularJS中打开天气应用程序的输出错误
- python - 我的基于矩阵的反向传播算法有什么问题?
- asp.net-mvc - 如何使用 FTP 或使用代码优先迁移的文件系统发布方法更新远程数据库
- java - 从 Resttemplate 调用时,不支持请求方法“PUT”
- spark-ar-studio - 我们可以在 Spark AR 中跟踪快乐、悲伤、愤怒等面部情绪吗?
- large-data - 大规模线性约束凸二次优化 - R/Python/Gurobi
- stream - WebRTC videochat p2p:从本地流切换到 p2p 流