小编sno*_*ude的帖子

检测内存不足之前在Windows上分配开始失败

我们有一个可能会分配大量小对象的应用程序(取决于用户输入).有时,应用程序会耗尽内存并导致崩溃.

但是,如果我们知道内存分配变得紧张,那么可以销毁一些优先级较低的对象,从而使我们能够优雅地降低用户结果.

在调用"new"实际上失败之前,检测进程内存的最佳方法是什么?我们可以调用API函数GetProcessWorkingSetSize(),GetProcessMemoryInfo()但是如何知道何时达到给定机器的限制(例如,最大分配的80%)?

c++ windows mfc memory-management

5
推荐指数
1
解决办法
1231
查看次数

如何在TinyXML2中将XMLElement转换为字符串

在TinyXml 1中,可以使用<<运算符将子元素转换为字符串,例如

TiXmlElement * pxmlChild = pxmlParent->FirstChildElement( "child" );
std::stringstream ss;
ss << (*pxmlChild);
Run Code Online (Sandbox Code Playgroud)

这在TinyXml2中似乎不可能.如何在TinyXml2中将元素转换为xml字符串?

编辑:特别是我在xml之后,例如,如果xml是:

<parent>
    <child>
        <value>abc</value>
    </child>
<parent>
Run Code Online (Sandbox Code Playgroud)

我想要子元素的xml,例如

<child>
    <value>abc</value>
</child>
Run Code Online (Sandbox Code Playgroud)

c++ xml tinyxml tinyxml2

5
推荐指数
2
解决办法
6353
查看次数

静态boost :: wregex实例是否是线程安全的?

使用固定的boost :: wregex声明静态/全局变量然后从多个线程使用它而不用担心正则表达式的内部状态(如果Boost已使用BOOST_HAS_THREADS编译)是否安全?

例如

boost::wregex g_regex( L"common|test" );
Run Code Online (Sandbox Code Playgroud)

然后有多个线程调用:

if ( boost::regex_search( test_str, g_regex ) )
...
Run Code Online (Sandbox Code Playgroud)

c++ boost

5
推荐指数
1
解决办法
808
查看次数

使用 Outlook 的 MAPISendMail 有时会生成 winmail.dat

我在 MFC 应用程序中使用MAPISendMail(),但遇到一个问题:Webmail 客户端有时会收到 winmail.dat 附件,而不是“真实”附件。

我研究了很多,发现其他人也遇到这个问题,但没有找到解决方案。

我相信问题可能出在我的MapiFileDesc结构中,其中我将 lpFileType 成员保留为 NULL,以便让邮件程序(在我的例子中为 Outlook 2010)自动确定文件类型。 lpFiletype是一个MapiFileTagExt结构,文档是这样说的: NULL值表示未知的文件类型或由操作系统确定的文件类型。

所以我相信这应该适用于常见类型,例如 JPEG 或 GIF 等。

我读到 winmail.dat 是由 Outlook 发送使用ms-tnef编码编码的邮件引起的,该编码是 Microsoft 专有的。但是,发送电子邮件时,Outlook 将“HTML”显示为突出显示,而不是 RTF。

有谁遇到过这个问题并妥善解决了吗?

通过 SMTP 等发送不是一种选择,因为用户应该在其“已发送邮件”文件夹中拥有邮件的副本。使用 Outlook 对象模型不是一个选项,因为这需要用户安装 Outlook,而不是任何 MAPI 兼容客户端。

mfc mapisendmail winmail.dat

4
推荐指数
1
解决办法
2428
查看次数

从给定的Boost token_iterator中识别原始字符串中的位置

如果使用Boost标记生成器处理了字符串,则可以获取给定标记迭代器指向的原始字符串中的位置:

boost:tokenizer<> tok( "this is the original string" );
for(tokenizer<>::iterator it=tok.begin(); it!=tok.end();++it)
{
    std::string strToken = *it;
    int charPos = it.?                /* IS THERE A METHOD? */
}
Run Code Online (Sandbox Code Playgroud)

我意识到我可以使用已定义的'keep delimiters'列表创建一个特定的char_separator并指定keep_empty_tokens来尝试跟踪迭代器的进度,但我希望有一种更简单的方法只使用迭代器本身.

c++ boost stl tokenize

3
推荐指数
1
解决办法
944
查看次数

除非指定较低的字体质量,否则ExtTextOut将失败,并且字符串非常长

有时我们的应用程序需要使用ExtTextOut绘制非常长的字符串(例如6,000个字符).有时ExtTextOut失败并返回零,GetLastError也返回零.

要重新创建该情境,请创建一个简单的MFC Single Document应用程序,然后将OnDraw设置为:

void CTestExtTextView::OnDraw(CDC* pDC)
{
 CTestExtTextDoc* pDoc = GetDocument();
 ASSERT_VALID(pDoc);
 if (!pDoc)
  return;

 LOGFONT lfDetail = {0};
 lfDetail.lfHeight = -(::MulDiv(100, pDC->GetDeviceCaps(LOGPIXELSY), 720));
 lfDetail.lfCharSet = ANSI_CHARSET;
 lfDetail.lfOutPrecision = OUT_DEFAULT_PRECIS;
 lfDetail.lfQuality = CLEARTYPE_QUALITY;
 lfDetail.lfWeight = 400;
 _tcscpy_s(lfDetail.lfFaceName, LF_FACESIZE, _T("Arial"));

 CFont font;
 font.CreateFontIndirectW( &lfDetail );

 CFont * pold = pDC->SelectObject( &font );

 CString str = L"2 <office:document-content xmlns:office=\"urn:oasis:names:tc:opendocument:xmlns:office:1.0\" xmlns:style=\"urn:oasis:names:tc:opendocument:xmlns:style:1.0\" xmlns:text=\"urn:oasis:names:tc:opendocument:xmlns:text:1.0\" xmlns:table=\"urn:oasis:names:tc:opendocument:xmlns:table:1.0\" xmlns:draw=\"urn:oasis:names:tc:opendocument:xmlns:drawing:1.0\" xmlns:fo=\"urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:meta=\"urn:oasis:names:tc:opendocument:xmlns:meta:1.0\" xmlns:number=\"urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0\" xmlns:presentation=\"urn:oasis:names:tc:opendocument:xmlns:presentation:1.0\" xmlns:svg=\"urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0\" xmlns:chart=\"urn:oasis:names:tc:opendocument:xmlns:chart:1.0\" xmlns:dr3d=\"urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0\" xmlns:math=\"http://www.w3.org/1998/Math/MathML\" xmlns:form=\"urn:oasis:names:tc:opendocument:xmlns:form:1.0\" xmlns:script=\"urn:oasis:names:tc:opendocument:xmlns:script:1.0\" xmlns:ooo=\"http://openoffice.org/2004/office\" xmlns:ooow=\"http://openoffice.org/2004/writer\" xmlns:oooc=\"http://openoffice.org/2004/calc\" xmlns:dom=\"http://www.w3.org/2001/xml-events\" xmlns:xforms=\"http://www.w3.org/2002/xforms\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" …
Run Code Online (Sandbox Code Playgroud)

c++ mfc draw

2
推荐指数
1
解决办法
1399
查看次数