我使用注册表并使用函数RegNotifyChangeKeyValue。第一个选项需要注册表键句柄(HKEY),但我有RegistryKey,我可以从中获得SafeRegistryKey(key-> Handle)。
RegistryKey^ key = myKey;
RegNotifyChangeKeyValue(key->Handle, true, dwFilter, events[i], true);
错误:"类型" Microsoft :: Win32 :: SafeHandles :: SafeRegistryHandle"与" HKEY""
类型的参数不兼容我如何获得HKEY?
答案 0 :(得分:3)
需要进行转换才能从safe-handle类中的包装IntPtr
获取到本机句柄。它看起来像这样:
HKEY handle = (HKEY)key->Handle->DangerousGetHandle().ToPointer();
你可以对方法名称中的“Dangerous”这个词感到烦恼,它的名字恰如其分。在您不再需要更改通知之前,CLR无法确保句柄保持有效。现在,您的工作是确保key
对象引用保持可见,垃圾收集器不会过早收集它。
它不能是局部变量,可以成为类的成员,但这又要求类对象保持引用。将它存储在static
变量中是最安全的方法,调用GCHandle :: Alloc()是下一个最好的方法,也许你需要gcroot<>
。问题中没有任何背景可以打电话。