reinterpret_cast编译失败

3

我想积累一些关于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));
.....

编译器报错,指出reinterpret_cast“类型转换无效”。 我认为我已经足够好地复制了现有的示例,并且不明白为什么转换失败。

能否创建一个[mcve]?一切看起来都很好,但您可能至少应该包含编译器实际的错误。顺便说一下,这个类似的代码似乎可以正常编译。 - Tas
1个回答

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;

我不确定这是否是一个优雅的解决方案,但对我来说起作用了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接