関数の説明はこちら。
私は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);