C++ 创建图元文件时奇怪的函数失败

C++ 创建图元文件时奇怪的函数失败,c++,mfc,gdi,C++,Mfc,Gdi,下一个函数导致断言失败,为什么 void SimpleMeta(CDC* pDC) { CMetaFileDC meta; meta.CreateEnhanced(pDC, CString("Square.emf"), CRect(0,0,100,100),CString("Simple square")); meta.Rectangle(10,10,90,90); meta.CloseEnhanced(); meta.DeleteDC(); } 另外,我在调试时注意到,当第二次调用它时,它会

下一个函数导致断言失败,为什么

void SimpleMeta(CDC* pDC)
{
CMetaFileDC meta;
meta.CreateEnhanced(pDC, CString("Square.emf"), CRect(0,0,100,100),CString("Simple square"));
meta.Rectangle(10,10,90,90);
meta.CloseEnhanced();
meta.DeleteDC();
}

另外,我在调试时注意到,当第二次调用它时,它会失败。它在OnDraw方法中调用。为什么要调用OnDraw方法两次呢?谢谢。

您的描述参数不正确。这是MSDN的一段引文

LPSZSDescription参数指向的字符串必须包含 应用程序名称和图片名称之间的空字符,以及 必须以两个空字符结尾-例如,“XYZ图形” 编辑器\0秃鹰\0\0,“其中\0表示空字符。如果 lpszDescription为空,列表中没有相应的条目 增强的图元文件头

此外,不需要用CString包装文本字符串

meta.CreateEnhanced(pDC, 
    _T("Square.emf"), 
    CRect(0,0,100,100),
    _T("My program\0Simple square\0"));

例如

有太多的原因可以解释为什么会出现分段错误。在调试期间,您应该查看哪些变量未初始化或为空;“破坏者会帮你做的。”@Raxvan我检查了所有东西,至少我认为是这样。@john把它拿走了,还是一样。谢谢,但看起来还有别的东西。试过了,但还是一样。。。我甚至试过用NULL作为描述。。。它创建了元文件,但里面什么都没有。。。