我正在尝试复制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);
答案 0 :(得分:0)
错误消息“ REGDB_E_CLASSNOTREG”与文件名无关,它与找不到LearningModel对象的实现有关。 (如果出现文件问题,则会收到文件找不到错误或其他字符串。) 请确保您拥有正确的SDK(Windows SDK, build 17763 or later)和Windows OS版本(Windows 10, version 1809 or later)。