Sah*_*wal 0 .net c# pointers intptr
我写了一个在COM中实现IGroupPolicyObject接口的类.其中一个方法现在返回C#中的IntPtr对象:
IntPtr ghKey = objectGPolicy.GetRegistryKey(GpoSectionMachine);
Run Code Online (Sandbox Code Playgroud)
我想在使用属于Microsot.Win32命名空间的RegistryKey对象时derefrence该指针.
这不起作用:
(RegistryKey)ghKey = rootKey.CreateSubKey(policyPath);
Run Code Online (Sandbox Code Playgroud)
我找不到如何降低IntPtr.有人可以帮忙吗?
谢谢
IGroupPolicyObject.GetRegistryKey不返回.NET RegistryKey对象,它返回Win32注册表项句柄(an HKEY).使用IntPtr包含本机HKEY 的值可以执行两项有用的操作.首先,您可以将其传递给其他Win32 注册表访问功能.如果您以这种方式使用它,您还需要RegCloseKey在完成后通过调用手动关闭它,否则它将泄漏句柄.
正如@HansPassant在他的评论中指出的那样,你的第二个(可能更好)选项是把它变成a SafeRegistryHandle并用它来获取一个RegistryKey对象:
var hkey = gpo.GetRegistryKey(GpoSectionMachine);
var safeHandle = new SafeRegistryHandle(hkey, true);
var reg = RegistryKey.FromHandle(safeHandle);
Run Code Online (Sandbox Code Playgroud)
如果你编写了一个托管实现,IGroupPolicyObject它RegistryKey从这个函数返回一个实际的对象,那么:
IGroupPolicyObject,和RegistryKey对象变成一个IntPtr在您的实现,所以只是做相反把它找回来了.(但实际上 - 不要这样做,你通过返回错误的类型来打破COM合同.)应该编写此方法的实现来返回a SafeRegistryHandle(我相信,封送程序将自动转换SafeHandle为非托管句柄).RegistryKey.Handle是其中之一,因此您可以使用C#类直到您需要从实现中返回一些内容.
| 归档时间: |
|
| 查看次数: |
423 次 |
| 最近记录: |