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」です。ロールタイプを表す1つまたは2つの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 に答える