0

功能说明在这里。

我正在努力从 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);

我最好的猜测是第 5 个参数“pRoles”。我应该向它发送一个指向代表角色类型的一两个 GUID 的指针。

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 文件中得到这个吗?)

任何帮助将不胜感激......特别是因为互联网上此功能的信息接近零。

每个人的评论后的工作解决方案。

宣言:

[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 是该角色的 System.Guid。

获得邀请:

string invitation = Marshal.PtrToStringAuto(pInvitation);
4

2 回答 2

0

这是正确的声明:

[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); 
于 2011-07-24T09:56:11.480 回答
0

正如@strenr 所说,您应该使用ref Guid参数来传递 pRoles 的 GUID。但是,您可能已经决定不这样做,您是否查看过 WCF 对等支持?这将为您提供已经包含在 .NET 接口中的大部分对等功能?

看看这里

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

于 2011-07-24T10:12:16.833 回答