对于像这样编码的函数:

/*************************************************
*  DWORD WINAPI WlanHostedNetworkSetProperty(
*      _In_        HANDLE hClientHandle,
*      _In_        _WLAN_HOSTED_NETWORK_OPCODE OpCode,
*      _In_        DWORD dwDataSize,
*      _In_        PVOID pvData,
*      _Out_opt_   P_WLAN_HOSTED_NETWORK_REASON pFailReason,
*      _Reserved_  PVOID pvReserved
*  );
*************************************************/
[DllImport("Wlanapi.dll", SetLastError = true)]
public static extern UInt32 WlanHostedNetworkSetProperty(
    [In] IntPtr hClientHandle,
    [In] _WLAN_HOSTED_NETWORK_OPCODE OpCode,
    [In] UInt32 dwDataSize,
    [In] IntPtr pvData,
    [Out] out _WLAN_HOSTED_NETWORK_REASON pFailReason,
    [In, Out] IntPtr pvReserved
);

微软文档说,当我通过
_WLAN_HOSTED_NETWORK_OPCODE._WLAN_HOSTED_NETWORK_OPCODE_enable

作为 OpCode 的参数, pvData 的值应为指向 bool 值的指针。
Hereis the documentation for that function
我不知道如何使IntPtr指向 bool 值?
是否应该以与我将指向structt的指针传递给 pvData 相似的方式完成操作:
int size = Marshal.SizeOf(settings); //*settings* is a struct with some data
IntPtr pSettings = Marshal.AllocHGlobal(size);
Marshal.StructureToPtr(settings, pSettings, true);

/* use the IntPtr */

Marshal.FreeHGlobal(pSettings);

但是,相反,我编码(marshal) bool 值吗?还是有更简单的方法?

感谢所有可爱的人的帮助。

最佳答案

Win32 BOOL是DWORD。在这种情况下,可以将pvData定义为ref UInt32ref Int32。或将pvData保留为IntPtr,使用Marshal.AllocHGLobal(Marshal.SizeOf(Int32))分配非托管内存,并使用Marshal.WriteInt32填充此内存。

int size = Marshal.SizeOf(Int32);
IntPtr pBool = Marshal.AllocHGlobal(size);
编码(marshal).WriteInt32(pBool,0,1);//最后一个参数0(FALSE),1(TRUE)

/*使用IntPtr */

编码(marshal).FreeHGlobal(pBool);

关于c# - 如何将IntPtr设为 bool 值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13954614/

10-13 00:21