Frage

Bedienungsanleitung hier.

Ich kämpfe darum, es richtig zu machen, diese Funktion von C#zu nennen. Ich bin in einer Phase, in der ich es nenne, aber es kehrt e_invalidarg zurück.

Ich habe es wie folgt eingerichtet ...

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

Meine beste Vermutung ist der 5. Parameter "Proles". Ich soll ihm einen Zeiger auf ein oder zwei Guids senden, die den Rollentyp darstellen.

PEER_GROUP_ROLE_ADMIN
PEER_GROUP_ROLE_MEMBER

Ich habe derzeit keine Ahnung, wie ich dies von C#machen soll.

In C sieht dieser Parameter beim Aufrufen der Funktion so aus ...

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

Peer_role_id sieht aus wie ein System.guid -Typ. Peer_group_role_member sieht aus wie die tatsächliche GUID. (Kann ich dies aus der Datei p2p.dll bekommen?)

Jede Hilfe wäre sehr geschätzt ... zumal es fast null Informationen zu dieser Funktion im Internet gibt.

Arbeitslösung nach den Kommentaren aller.

Erklärung:

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

Berufung:

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

... wo Peer_Group_Role_Member das System ist. Guid für diese Rolle.

Die Einladung bekommen:

string invitation = Marshal.PtrToStringAuto(pInvitation);
War es hilfreich?

Lösung

Dies ist die richtige Erklärung:

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

Andere Tipps

Wie @strenr gesagt hat, Sie sollten a verwenden ref Guid Argument, um die GUID für die Proles zu verabschieden. Aber Sie haben sich vielleicht bereits dagegen entschieden, haben Sie sich die WCF-Peer-to-Peer-Unterstützung angesehen? Dies würde Ihnen die meisten Peer-to-Peer-Funktionen geben, die bereits in eine .NET-Schnittstelle abgeschlossen sind?

Schauen Sie sich hier an

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top