C++ 调用Gdiplus::PrivateFontCollection.AddMemoryFont时发生访问冲突错误
在本演练之后,将演示如何在不必在C++中安装字体的情况下使用字体:我在ntdll.dll中遇到地址冲突错误(0xc0000005) DialogEx::OnInitDialog()继承函数中的调用代码如下:C++ 调用Gdiplus::PrivateFontCollection.AddMemoryFont时发生访问冲突错误,c++,mfc,gdi+,privatefontcollection,C++,Mfc,Gdi+,Privatefontcollection,在本演练之后,将演示如何在不必在C++中安装字体的情况下使用字体:我在ntdll.dll中遇到地址冲突错误(0xc0000005) DialogEx::OnInitDialog()继承函数中的调用代码如下: Gdiplus::PrivateFontCollection m_fontcollection; HINSTANCE instance = AfxGetResourceHandle(); HRSRC res = FindResource(instance, MAKEINTRESOURCE(I
Gdiplus::PrivateFontCollection m_fontcollection;
HINSTANCE instance = AfxGetResourceHandle();
HRSRC res = FindResource(instance, MAKEINTRESOURCE(IDR_MAIN_FONT), L"BINARY");
HGLOBAL mem = LoadResource(instance, res);
void *data = LockResource(mem);
size_t len = SizeofResource(instance, res);
Gdiplus::Status Result = m_fontcollection.AddMemoryFont(data, len); // Exception arises
我调试了电话,一切看起来都很好。长度匹配并且没有空指针
异常发生在gdiplusfontcollection.h
inline Status
PrivateFontCollection::AddMemoryFont(IN const void* memory,
IN INT length)
{
return SetStatus(DllExports::GdipPrivateAddMemoryFont(
nativeFontCollection,
memory,
length));
}
这是无法进一步调试的
你知道如何找出函数调用中的错误吗?似乎是
nativeFontCollection
为空。不要忘记在之后调用gdiplussutdown
。似乎是nativeFontCollection
为空。别忘了在之后调用gdiplussutdown
。据我所知,微软的文档将此功能设置为“未实现”。你有不同的信息吗?看起来你必须使用C++ APIDO你必须使用GDI+?或者,您可以只使用“普通”GDI接口,在诸如CDC::TextOut(…)
等“普通”调用中加载/使用字体(从资源中)?如果是后者,我可以给你一些示例代码来加载和使用资源文件中的字体。你有不同的信息吗?看起来你必须使用C++ APIDO你必须使用GDI+?或者,您可以只使用“普通”GDI接口,在诸如CDC::TextOut(…)
等“普通”调用中加载/使用字体(从资源中)?如果是后者,我可以给你一些示例代码来加载和使用资源文件中的字体。不确定为什么会被否决,但这为我解决了问题:),所以+1不确定为什么会被否决,但这为我解决了问题:),所以+1