首页 > 解决方案 > 如何使用 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

标签: c++stdvectorwchar

解决方案


使用此函数,您必须传递一个指针变量,例如:

WCHAR *sFilenameIncoming;
GetFQDomainNameEx(&sFilenameIncoming);  <-this works

然后,您可以将指向的数据复制sFilenameIncoming到容器中,并释放分配。


//GetFQDomainNameEx(&sFQDN.data()); <-does not work

这不起作用,因为sFQDN.data()它是一个右值,所以你不能取它的地址。


推荐阅读