in cppwinrt/code_writers.h [1731:1807]
static void write_produce_args(writer& w, method_signature const& method_signature)
{
separator s{ w };
for (auto&& [param, param_signature] : method_signature.params())
{
s();
auto param_name = param.Name();
auto param_type = w.write_temp("%", param_signature->Type().Type());
if (param_signature->Type().is_szarray())
{
if (param.Flags().In())
{
w.write("array_view<@ const>(reinterpret_cast<@ const *>(%), reinterpret_cast<@ const *>(%) + __%Size)",
param_type,
param_type,
param_name,
param_type,
param_name,
param_name);
}
else if (param_signature->ByRef())
{
w.write("detach_abi<@>(__%Size, %)",
param_type,
param_name,
param_name);
}
else
{
w.write("array_view<@>(reinterpret_cast<@*>(%), reinterpret_cast<@*>(%) + __%Size)",
param_type,
param_type,
param_name,
param_type,
param_name,
param_name);
}
}
else
{
auto category = get_category(param_signature->Type());
if (param.Flags().In())
{
if (category != param_category::fundamental_type)
{
w.write("*reinterpret_cast<% const*>(&%)",
param_type,
param_name);
}
else
{
w.write(param_name);
}
}
else
{
if (is_object(param_signature->Type()))
{
w.write("winrt_impl_%", param_name);
}
else if (category != param_category::fundamental_type)
{
w.write("*reinterpret_cast<@*>(%)",
param_type,
param_name);
}
else
{
w.write("*%", param_name);
}
}
}
}
}