我试图收集一些DirectWrite的经验,但是我无法创建工厂:
我有一个C ++(CLR)类
public ref class TextFormat{
internal:
static IDWriteFactory* pBaseFactory;
.....
public:
TextFormat(String^ FontFamilyName, FontWeights FontWeight,
FontStyles FontStyle, FLOAT FontSize);
....
}
和带有代码的.cpp文件
.....
HRESULT HResult = DWriteCreateFactory(
DWRITE_FACTORY_TYPE_SHARED,
__uuidof(IDWriteFactory),
reinterpret_cast<IUnknown**>(&pBaseFactory));
.....
编译器抱怨重新解释广播“无效类型转换”。 我想我已经很好地复制了现有示例,但我不明白为什么强制转换失败。
答案 0 :(得分:2)
我想您正在尝试使用C ++帮助程序库。
大约一年前,我碰巧遇到了完全相同的问题。
我的解决方法是创建一个本地临时变量,以该变量为目标运行工厂创建,然后将值复制到我的帮助器类中,如下所示:
HRESULT HResult = DWriteCreateFactory (
DWRITE_FACTORY_TYPE_SHARED,
__uuidof( IDWriteFactory ),
reinterpret_cast<IUnknown**>( &pTempFactory )
);
if( HResult != 0 )System::Runtime::InteropServices::Marshal::ThrowExceptionForHR (HResult);
pBaseFactory = pTempFactory;
我不确定这是否是一个优雅的解决方案,但它对我有用。