Domanda

qui.

sto lottando per farlo bene chiamare questa funzione da C #. Sono in una fase in cui sto chiamando, ma si tratta di tornare E_INVALIDARG.

Ho impostato in su come segue ...

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

La mia ipotesi migliore è il 5 ° parametro, "proletari". Dovrei inviare un puntatore a uno o due GUID che rappresentano il tipo di ruolo.

PEER_GROUP_ROLE_ADMIN
PEER_GROUP_ROLE_MEMBER

Non ho idea attualmente come fare questo da C #.

In C questo parametro appare così quando si chiama la funzione ...

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

PEER_ROLE_ID assomiglia ad un tipo System.Guid. PEER_GROUP_ROLE_MEMBER si presenta come il GUID effettivo. (Posso ottenere questo dal file p2p.dll?)

Qualsiasi aiuto sarebbe molto apprezzato ... soprattutto perché c'è vicino alle info ZERO su questa funzione su internet.

Facendo soluzione dopo i commenti di tutti.

Dichiarazione:

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

Calling:

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

... dove è il PEER_GROUP_ROLE_MEMBER System.Guid per questo ruolo.

Come l'invito:

string invitation = Marshal.PtrToStringAuto(pInvitation);
È stato utile?

Soluzione

Questa è la dichiarazione corretta:

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

Altri suggerimenti

Come @strenr ha detto si dovrebbe usare un argomento ref Guid per passare il GUID per i proletari. Tuttavia, e si potrebbe avere già deciso contro questo, hai preso uno sguardo al supporto WCF peer-to-peer? Questo darebbe la maggior parte delle funzionalità peer-to-peer già avvolto in un .NET un'interfaccia?

Date un'occhiata qui

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top