功能说明 这里。

我正在努力从C#调用此功能的正确性。我正处于我称之为的阶段,但是它正在返回e_invalidarg。

我已经将其设置为如下...

[DllImport("p2p.dll", CharSet=CharSet.Unicode)]
internal static extern uint PeerGroupCreateInvitation(IntPtr hGroup, string pwzIdentityInfo, IntPtr pftExpiration, int cRoles, IntPtr pRoles, out string ppwzInvitation);

我最好的猜测是第五参数“ Proles”。我应该将其发送给代表角色类型的一个或两个指南。

PEER_GROUP_ROLE_ADMIN
PEER_GROUP_ROLE_MEMBER

我目前不知道如何从C#做到这一点。

在C中,此参数在调用函数...

..., (PEER_ROLE_ID*) &PEER_GROUP_ROLE_MEMBER, ...

PEER_ROLE_ID看起来像System.Guid类型。 PEER_GROUP_ROLE_MEMBER看起来像实际的GUID。 (我可以从p2p.dll文件中获取它吗?)

任何帮助都将不胜感激……尤其是因为在Internet上有关此功能的信息接近零信息。

在大家的评论后工作解决方案。

宣言:

[DllImport("p2p.dll")]
public static extern uint PeerGroupCreateInvitation(IntPtr hGroup, [MarshalAs(UnmanagedType.BStr)] string pwzIdentityInfo, int pftExpiration, int cRoles, ref Guid pRoles, out IntPtr ppwzInvitation);

呼叫:

uint hr = PeerGroupCreateInvitation(hGroup, identityInfo, 0, 1, ref PEER_GROUP_ROLE_MEMBER, out pInvitation);

... peer_group_role_member是该角色的系统。

获取邀请:

string invitation = Marshal.PtrToStringAuto(pInvitation);
有帮助吗?

解决方案

这是正确的声明:

[DllImport("p2p.dll")] 
public static extern uint PeerGroupCreateInvitation( 
                IntPtr hGroup,  /* Updated with @RedDude's suggestion */
                [MarshalAs(UnmanagedType.BStr)] string pwzIdentityInfo, 
                int pftExpiration, // 32 bit, not 64 bit 
                int cRoles, 
                ref Guid pRoles, 
                out IntPtr ppwzInvitation); 

其他提示

正如@strenr所说,您应该使用 ref Guid 争论通过proles的指导。但是,您可能已经决定反对这一点,您是否看过WCF点对点支持?这将为您提供大多数在.NET界面中包裹的点对点功能吗?

在这里看看

http://msdn.microsoft.com/en-us/library/system.net.peertopeer.aspx

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top