- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我找到了一个如何使用文件夹选择对话框的好例子:http://bobmoore.mvps.org/Win32/w32tip70.htm - 除了这个使用 CString 的示例之外,所有这些都有效,我不能在 MinGW 上使用它,因为它没有 stdafx.h
。所以我必须使用 string 或 char*。
但这里的问题是这个例子使用了 CString 方法:GetBuffer
和 ReleaseBuffer
我在字符串对象中没有。是否有任何其他方法将文件夹名称传递到文件夹选择窗口?
最佳答案
在处理 Windows API 和缓冲区时,可以使用 std::vector<BYTE>
对于字节和 std::vector<TCHAR>
对于字符串。 (如果定义了 UNICODE,则 TCHAR
定义为 wchar_t
,否则定义为 char
。这样代码对 UNICODE 和 ANSI 都有效)。在实例化 vector 时,给它一个大小来分配内存:
// can hold MAX_PATH TCHARs, including terminating '\0'
std::vector<TCHAR> buffer(MAX_PATH);
现在您可以将其视为几乎完全一样的 TCHAR 缓冲区,这些缓冲区是用 new 分配的或在堆栈上创建的。
BROWSEINFO bi = {0};
bi.pszDisplayName = &buffer[0];
然而,buffer.size()
将始终返回完整的 vector 长度。如果您需要知道存储在 vector 中的字符串的长度,或者想使用与字符串相关的方法,你可以把它复制到std::string
:
if( LPITEMIDLIST pidl = SHBrowseForFolder(&bi) ) {
// this way it works for both UNICODE and ANSI:
std::basic_string<TCHAR> folderName(&buffer[0]);
if( SHGetPathFromIDList(pidl,&buffer[0]) ) {
MessageBox(0, &buffer[0], folderName.c_str(), MB_OK);
}
// TODO: free pidl with IMalloc* obtained through SHGetMalloc()
}
自 std::string
只是另一个连续的容器,你可以(ab)使用它而不是 vector 。然而,size()
将返回存储在字符串中的元素数,即使它们是 \0
.你必须 resize()
第一次出现 \0
的字符串(这就是 CString::ReleaseBuffer() 所做的)当您将缓冲区分配给上例中的字符串时,它会自动完成。因为字符串不打算用作缓冲区(即使在技术上可行)我强烈建议使用 vector 方法。
关于c++ - MinGW 中 GetBuffer 和 ReleaseBuffer 的 CString 方法有哪些替代方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13809995/
我正在尝试为Android创建一个听起来不错的节拍器应用程序。现在,我创建了一个AudioTrack,然后按play进行初始化。然后,我将PCM字节写入缓冲区,并使用AudioTrack.writeS
来自 CString to char* , ReleaseBuffer() 必须在 GetBuffer() 之后使用。但为什么?如果我在 GetBuffer() 之后不使用 ReleaseBuffer
我连接到 IAudioClient 和 IAudioRenderClient 以检索原始音频缓冲区。为了确定格式,我之前在客户端调用了 GetMixFormat。这适用于大多数应用程序,例如 Fire
根据 CString 的 GetBufferSetLength() 的 MSDN 文档,对该方法的调用之后应该是对 ReleaseBuffer() 的匹配调用。 但是,在同一页面的示例代码中,注释指出
我找到了一个如何使用文件夹选择对话框的好例子:http://bobmoore.mvps.org/Win32/w32tip70.htm - 除了这个使用 CString 的示例之外,所有这些都有效,我不
我是一名优秀的程序员,十分优秀!