【发布时间】:2012-05-30 17:41:15
【问题描述】:
DWORD OREnumValue(
__in ORHKEY Handle,
__in DWORD dwIndex,
__out PWSTR lpValueName,
__inout PDWORD lpcValueName,
__out_opt PDWORD lpType,
__out_opt PBYTE lpData,
__inout_opt PDWORD lpcbData
);
我的代码:
public static extern uint OREnumValue(IntPtr Handle, uint dwIndex, [MarshalAsAttribute(UnmanagedType.LPWStr)] out StringBuilder lpValueName, ref int lpcValueName, out uint lpType, out IntPtr lpData, ref int lpcbData);
IntPtr Handle=mykey;
uint dwIndex=0;
StringBuilder lpValueName = new StringBuilder(16383);
int lpcValueName=lpValueName.Capacity;
uint lpType=0;
IntPtr lpData;
int lpcbData = int.MaxValue;
uint ret3= OREnumValue(Handle, dwIndex, out lpValueName, ref lpcValueName, out lpType, out lpData, ref lpcbData);
这给出了一个错误:
ret3=ERROR_MORE_DATA 259
我认为问题出在
- lpData - 我应该为 PBYTE 使用什么?或者
- lpcbData - 我应该使用什么容量?
来自 MSDN
如果 lpData 指定的缓冲区不够大,无法容纳 数据,该函数返回 ERROR_MORE_DATA 并存储所需的 lpcbData 指向的变量中的缓冲区大小。在这种情况下, lpData 的内容未定义。
【问题讨论】:
-
和你上一个问题差不多,这次是RegEnumValue。在 www.pinvoke.net 上查找 pinvoke 声明
-
我尝试了这里的示例pinvoke.net/default.aspx/advapi32/RegEnumValue.html 它返回 ERROR_MORE_DATA
-
PBYTE听起来像是需要填充的byte[]。
标签: c# winapi registry unmanaged dllimport