代码之家  ›  专栏  ›  技术社区  ›  Andrew Truckle

是否有将CStrBufT与CString一起使用的工作示例?

  •  0
  • Andrew Truckle  · 技术社区  · 1 年前

    官方文件: CStrBufT

    我偶然上了这门课。我搜索了一下,没有找到任何例子。是否属于以下情况:

    CString str1 = L”XYZ”;
    CStrBufT str1buf = CStrBufT(str1);
    

    ? 有人真的用过这个包装类吗?

    我不知道为什么会有势均力敌的票数。这是非常清楚的。我想要一个使用这个类而不是:

    str1.GetBuffer
    str1.GetBufferSetLength
    str1.ReleaseBuffer
    
    1 回复  |  直到 1 年前
        1
  •  1
  •   j6t    1 年前

    最常见的是,您使用 CStrBuf 当您必须将字符串缓冲区传递给被调用函数填充的C API时。以下是一个调用的示例 GetModuleFileName() 来自C++(我的头顶)。

    // assume we got a valid HMODULE somewhere
    HMODULE module = ...;
    
    // somehow decide on a buffer size; for simplicity, use a constant here
    DWORD size = MAX_PATH;
    
    CString filename;
    GetModuleFileName(module, CStrBuf(filename, size), size);
    
    // the result is now in filename
    
    // (note: error checks omitted for brevity)
    

    CStrBuf 有一个 operator LPTSTR ,即它可以隐式地转换为可写字符串。出于这个原因,它可以写成临时对象来代替 LPTSTR 自变量(本例中的第二个自变量)。

    请注意 CStrBufT 类模板就像 CStringT 是。坚持专业化 CStrBuf 类似于 CString .