【发布时间】:2020-12-02 13:50:40
【问题描述】:
当我使用来自microsoft docs to migrate to winrt from cx 的帮助函数时,我发生了这个错误。我看到一个类似的问题here,但提到的解决方案似乎对我不起作用。此处提到的解决方案在有此错误的文件中的任何其他 winrt 标头之前添加#include
template <typename T>
T from_cx(Platform::Object ^ from) {
T to{nullptr};
winrt::check_hresult(reinterpret_cast<::IUnknown*>(from)->QueryInterface(
winrt::guid_of<T>(), reinterpret_cast<void**>(winrt::put_abi(to))));
return to;
}
这是整个文件:
#pragma once
#include <Unknwn.h>
#include <winrt/Windows.Foundation.h>
namespace x {
namespace y {
template <typename T>
T from_cx(Platform::Object ^ from) {
T to{nullptr};
winrt::check_hresult(reinterpret_cast<::IUnknown*>(from)->QueryInterface(
winrt::guid_of<T>(), reinterpret_cast<void**>(winrt::put_abi(to))));
return to;
}
template <typename T>
T ^
to_cx(winrt::Windows::Foundation::IUnknown const& from) {
return safe_cast<T ^>(reinterpret_cast<Platform::Object ^>(winrt::get_abi(from)));
}
}
}
【问题讨论】:
-
如果您是
#include <Unknwn.h>,请确保您确实在任何 winrt 标头之前包含它。使用预编译头文件时,您还必须在其中包含 Unknwn.h。 -
您好,我在上面添加了文件的全部内容进行了编辑。我确实在任何其他标题之前都有包含。
-
您发布了一个头文件。头文件不是编译单元。您的编译单元 必须在任何其他winrt 头文件之前包含Unknwn.h。编译单元的文件扩展名通常为 .cpp、.cc 或 .cxx。
标签: c++ windows-runtime winrt-xaml c++-cx c++-winrt