C#からPeerGroupCreateInvitationを呼び出す
-
25-10-2019 - |
質問
関数の説明 ここ。
私は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つのガイドへのポインターを送信することになっています。
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);
解決
これは正しい宣言です。
[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が言ったように、あなたはaを使用する必要があります ref Guid
プロールのGUIDを渡すという議論。しかし、あなたはすでにこれに反対したかもしれないかもしれませんが、あなたはWCFピアツーピアのサポートを見ていますか?これにより、既に.NETインターフェイスに包まれているピアツーピア機能のほとんどが得られますか?
ここを見てください
http://msdn.microsoft.com/en-us/library/system.net.peertopeer.aspx
所属していません StackOverflow