описание функций here.Вызов PeerGroupCreateInvitation из C#
Я изо всех сил, чтобы получить право называть эту функцию из 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);
Моя догадка является пятым параметром, «пролетарии». Я должен послать ему указатель на один или два идентификатора 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?)
Любая помощь будет принята с благодарностью ... особенно, поскольку в этой функции в Интернете есть информация о ZERO.
Рабочее решение после комментариев каждого.
Декларация:
[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);
вы настройки cRoles числу PROLE GUIDs? И не должны ли pRoles быть списком целых чисел для представления указателей. –