Pregunta

Función descriptiva aquí.

Estoy luchando por darle la pena llamar a esta función desde C#. Estoy en una etapa en la que lo llamo, pero está devolviendo E_invalidarg.

Lo he configurado de la siguiente manera ...

[DllImport("p2p.dll", CharSet=CharSet.Unicode)]
internal static extern uint PeerGroupCreateInvitation(IntPtr hGroup, string pwzIdentityInfo, IntPtr pftExpiration, int cRoles, IntPtr pRoles, out string ppwzInvitation);

Mi mejor suposición es el quinto parámetro, "Proles". Se supone que debo enviarle un puntero a uno o dos GUID que representen el tipo de rol.

PEER_GROUP_ROLE_ADMIN
PEER_GROUP_ROLE_MEMBER

Actualmente no tengo idea de cómo hacer esto desde C#.

En C, este parámetro se ve así cuando llamas a la función ...

..., (PEER_ROLE_ID*) &PEER_GROUP_ROLE_MEMBER, ...

Peer_role_id parece un tipo de sistema. Peer_group_role_member se parece al guía real. (¿Puedo obtener esto del archivo p2p.dll?)

Cualquier ayuda sería muy apreciada ... especialmente porque hay información cercana a cero en esta función en Internet.

Solución de trabajo después de los comentarios de todos.

Declaración:

[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);

Vocación:

uint hr = PeerGroupCreateInvitation(hGroup, identityInfo, 0, 1, ref PEER_GROUP_ROLE_MEMBER, out pInvitation);

... donde peer_group_role_member es el system.guid para este rol.

Obteniendo la invitación:

string invitation = Marshal.PtrToStringAuto(pInvitation);
¿Fue útil?

Solución

Esta es la declaración correcta:

[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); 

Otros consejos

Como @strenr ha dicho que deberías usar un ref Guid argumento para pasar el GUID por los proles. Sin embargo, y es posible que ya haya decidido en contra de esto, ¿ha echado un vistazo al soporte de igual a igual de WCF? ¿Esto le daría la mayoría de las capacidades de igual a igual que ya están envueltas en una interfaz .NET?

Echa un vistazo aquí

http://msdn.microsoft.com/en-us/library/system.net.peertoper.aspx

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top