reinterpret_cast无法编译

时间:2018-08-31 07:08:26

标签: c++ com directx

我试图收集一些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));
.....

编译器抱怨重新解释广播“无效类型转换”。 我想我已经很好地复制了现有示例,但我不明白为什么强制转换失败。

1 个答案:

答案 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;

我不确定这是否是一个优雅的解决方案,但它对我有用。