Описание функции здесь.
Я изо всех сил пытаюсь понять, правильно ли вызывать эту функцию из 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);