Вызов PeerGroupCreateInvitation из C#
-
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 -й параметр, «Профес». Я должен отправить ему указатель на одну или две гииды, представляющие тип роли.
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 является системой. 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 ref Guid
Аргумент, чтобы пройти GUID для прола. Однако, и вы, возможно, уже решили против этого, взглянули ли вы на одноранговую поддержку WCF? Это даст вам большинство одноранговых возможностей, уже завернутых в интерфейс .NET?
Посмотрите здесь
http://msdn.microsoft.com/en-us/library/system.net.peertopeer.aspx