Question

Description de la fonction ici.

Je me bats pour obtenir ce droit d'appeler cette fonction de c #. Je suis à un stade où je vous appelle, mais il est de retour E_INVALIDARG.

Je l'ai établi comme suit ...

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

Ma meilleure estimation est le 5ème paramètre, « prolos ». Je suis censé envoyer un pointeur vers un ou deux représentant le GUID type de rôle.

PEER_GROUP_ROLE_ADMIN
PEER_GROUP_ROLE_MEMBER

Je n'ai pas la moindre idée actuellement comment faire de c #.

Dans ce paramètre C se présente comme suit lors de l'appel de la fonction ...

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

PEER_ROLE_ID ressemble à un type System.Guid. PEER_GROUP_ROLE_MEMBER ressemble le GUID réel. (Puis-je obtenir ce à partir du fichier p2p.dll?)

Toute aide serait grandement appréciée ... d'autant plus qu'il est proche de ZERO informations sur cette fonction sur Internet.

Solution de travail après les commentaires de tout le monde.

Déclaration:

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

Appel:

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

... où PEER_GROUP_ROLE_MEMBER est le System.Guid pour ce rôle.

Obtenir l'invitation:

string invitation = Marshal.PtrToStringAuto(pInvitation);
Était-ce utile?

La solution

Ceci est la déclaration correcte:

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

Autres conseils

Comme @strenr a dit que vous devez utiliser un argument ref Guid pour passer le GUID pour les prolos. Cependant, et vous pourriez avoir déjà décidé contre cela, avez-vous pris un regard sur le soutien peer-to-peer WCF? Cela vous donne la plupart des capacités peer-to-peer déjà enveloppé dans une interface .NET?

Jetez un coup d'oeil ici

http://msdn.microsoft.com/en- nous / bibliothèque / system.net.peertopeer.aspx

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top