在WinML中加载ONNX模型时,如何解决“ REGDB_E_CLASSNOTREG”错误

时间:2019-06-05 22:56:22

标签: windows-machine-learning

我正在尝试复制https://docs.microsoft.com/en-us/windows/ai/windows-ml/get-started-desktop中描述的WinML教程,并且需要帮助解决加载模型时出现的“访问冲突读取位置”错误。

已安装Visual Studio 2017,Windows 10,内部版本17763,并按照本教程中的说明进行操作。 我想知道是否可能是由于访问控制问题引起的,所以我尝试将ONNX文件放在多个位置(甚至在解决方案文件夹中),尝试使用Debug x64和x86风味,更改了文件许可权,但仍然无法正常工作。

void LoadModel()
{
    // load the model
    printf("Loading modelfile '%ws' on the '%s' device\n", modelPath.c_str(), deviceName.c_str());
    DWORD ticks = GetTickCount();
    model = LearningModel::LoadFromFilePath(modelPath);  //FAILS here.
    ticks = GetTickCount() - ticks;
    printf("model file loaded in %d ticks\n", ticks);
}

我期望LearningModel :: LoadFromFilePath(modelPath);成功并返回有效的句柄。

进一步调试后,下面的代码中的WINRT_RoGetActivationFactory返回REGDB_E_CLASSNOTREG未注册的类

namespace winrt
{
    template <typename Interface = Windows::Foundation::IActivationFactory>
    impl::com_ref<Interface> get_activation_factory(param::hstring const& name)
    {
        void* result{};
        hresult hr = WINRT_RoGetActivationFactory(get_abi(name), guid_of<Interface>(), &result);

1 个答案:

答案 0 :(得分:0)

错误消息“ REGDB_E_CLASSNOTREG”与文件名无关,它与找不到LearningModel对象的实现有关。 (如果出现文件问题,则会收到文件找不到错误或其他字符串。) 请确保您拥有正确的SDK(Windows SDK, build 17763 or later)和Windows OS版本(Windows 10, version 1809 or later)。