Вопрос

Описание функции здесь.

Я изо всех сил пытаюсь найти эту функцию из 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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top