1

我试图将一些内容存储到字符串变量中,方法是将其作为参数传递给各种类型的 Windows API 函数,这些函数接受 char * 之类的变量。

例如,我的代码是:-

std::string myString;
GetCurrentDirectoryA( MAX_PATH, myString );

现在如何在这种情况下将字符串变量转换为 LPSTR。

请注意,这个函数不是用来传递字符串的内容作为输入,而是函数在执行后将一些内容存储到字符串变量中。因此,排除了 myString.c_str( )。

编辑:我有一个解决方法,可以删除字符串的概念并将其替换为类似

char myString[ MAX_PATH ];

但这不是我的目标。我想使用字符串。有什么办法可以吗?

也像

GetCurrentDirectoryA( MAX_PATH, ( LPSTR ) myString );

不管用。

在此先感谢您的帮助。

4

3 回答 3

6

通常,人们重写他们需要std::string友好的 Windows 函数,如下所示:

std::string GetCurrentDirectoryA()
{
  char buffer[MAX_PATH];
  GetCurrentDirectoryA( MAX_PATH, buffer );
  return std::string(buffer);
}

或者这个以获得广泛的字符支持:

std::wstring GetCurrentDirectoryW()
{
  wchar_t buffer[MAX_PATH];
  GetCurrentDirectoryW( MAX_PATH, buffer );
  return std::wstring(buffer);
}
于 2013-04-01T07:18:32.647 回答
2

LPTSTR被定义为TCHAR*,所以实际上它只是一个普通的 C 字符串,但这取决于您在代码中使用的是 ASCII 还是 Unicode。也一样

LPTSTR lpStr = new TCHAR[256];
ZeroMemory(lpStr, 256);
//fill the string using i.e. _tcscpy
const char* cpy = myString.c_str();
_tcscpy (lpStr, cpy);
//use lpStr

请参阅此处以获取有关线程_tcscpy的参考。

于 2013-04-01T06:41:42.077 回答
0

通常,我会将数据读入 TCHAR,然后将其复制到我的 std::string 中。这是最简单的方法。

于 2013-04-01T06:37:48.527 回答