题
功能说明 这里。
我正在努力从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
不隶属于 StackOverflow