reinterpret_cast 编译失败

reinterpret_cast Fails to Compile

我正在尝试收集一些使用 DirectWrite 的经验,但我无法创建工厂:

我有一个 C++ (CLR) class

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));
.....

编译器抱怨 reinterpretcast "Invalid type conversion"。 我想我已经很好地复制了现有的示例,但我不明白转换失败的原因。

我猜你正在试验 C++ 帮助程序库。

大约一年前,我碰巧 运行 遇到了完全相同的问题。

我的解决方法是创建一个本地临时变量,运行 以该变量作为目标的工厂创建,然后将值复制到我的助手 class,就像这样:

HRESULT HResult = DWriteCreateFactory (
  DWRITE_FACTORY_TYPE_SHARED,
  __uuidof( IDWriteFactory ),
  reinterpret_cast<IUnknown**>( &pTempFactory )
);
if( HResult != 0 )System::Runtime::InteropServices::Marshal::ThrowExceptionForHR (HResult);
pBaseFactory = pTempFactory;

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