reinterpret_cast не может скомпилировать - PullRequest
0 голосов
/ 31 августа 2018

Я пытаюсь получить некоторый опыт работы с 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 голосов
/ 31 августа 2018

Полагаю, вы экспериментируете с вспомогательной библиотекой 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;

Я не уверен, что это элегантное решение, но оно сработало для меня.

...