Я пытаюсь добавить код C ++ к сгенерированному заголовку, полученному из компилятора MIDL, используя атрибут cpp_quote . Но ничего не добавляется к сгенерированному выводу, и я понятия не имею, почему.
Я использую VS 2019 с расширением C ++ / WinRT, проект представляет собой проект C ++ / WinRT с конфигурацией по умолчанию.
Входной файл IDL:
cpp_quote("#define FOO")
namespace FooWinRT
{
runtimeclass Class
{
Class();
Int32 MyProperty;
}
}
Сгенерированный вывод:
// WARNING: Please don't edit this file. It was generated by C++/WinRT v2.0.200224.2
#pragma once
#include "winrt/FooWinRT.h"
namespace winrt::FooWinRT::implementation
{
template <typename D, typename... I>
struct __declspec(empty_bases) Class_base : implements<D, FooWinRT::Class, I...>
{
using base_type = Class_base;
using class_type = FooWinRT::Class;
using implements_type = typename Class_base::implements_type;
using implements_type::implements_type;
hstring GetRuntimeClassName() const
{
return L"FooWinRT.Class";
}
};
}
namespace winrt::FooWinRT::factory_implementation
{
template <typename D, typename T, typename... I>
struct __declspec(empty_bases) ClassT : implements<D, Windows::Foundation::IActivationFactory, I...>
{
using instance_type = FooWinRT::Class;
hstring GetRuntimeClassName() const
{
return L"FooWinRT.Class";
}
auto ActivateInstance() const
{
return make<T>();
}
};
}
#if defined(WINRT_FORCE_INCLUDE_CLASS_XAML_G_H) || __has_include("Class.xaml.g.h")
#include "Class.xaml.g.h"
#else
namespace winrt::FooWinRT::implementation
{
template <typename D, typename... I>
using ClassT = Class_base<D, I...>;
}
#endif
(Конечно, фактический производственный код более сложный, это лишь минимальный пример того, что я пытаюсь делать.)
Чего мне не хватает, почему он не делает то, что должен делать?