Autor Beitrag
Fabian E.
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 554

Windows 7 Ultimate
Visual Studio 2008 Pro, Visual Studion 2010 Ultimate
BeitragVerfasst: Mo 09.11.09 19:43 
Hallo zusammen,

ich beschäftige mich erst seit kurzem gezwungenermaßen mit DLLImport und habe nun ein Problem.

Grundlegend möchte ich die Methoden WlanHostedNetworkQueryProperty und WlanHostedNetworkQueryStatus aus der Wlanapi.dll verwenden. Diese Methoden exisitieren erst ab Windows 7.

Alle weiteren Funktionen aus dem Bereich HostedNetwork habe ich bereits zum Laufen gebracht, es hapert nur an diesen beiden hier. Leider sind die Definitionen für diese Methoden deshalb auch etwas komplizierter.
Hier erst mal kurz die Definitionen in C++:

WlanHostedNetworkQueryProperty:
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
DWORD WINAPI WlanHostedNetworkQueryProperty(
  __in        HANDLE hClientHandle,
  __in        WLAN_HOSTED_NETWORK_OPCODE OpCode,
  __out       PDWORD pdwDataSize,
  __out       PVOID *ppvData,
  __out       PWLAN_OPCODE_VALUE_TYPE *pWlanOpcodeValueType,
  __reserved  PVOID pvReserved
);

WlanHostedNetworkQueryStatus:
ausblenden Quelltext
1:
2:
3:
4:
5:
DWORD WINAPI WlanHostedNetworkQueryStatus(
  __in        HANDLE hClientHandle,
  __out       PWLAN_HOSTED_NETWORK_STATUS *ppWlanHostedNetworkStatus,
  __reserved  PVOID pvReserved
);


Weitere Informationen zu den dort verwendeten Structs gibts unter den Links in der MSDN.

Zu QueryProperty muss ich noch eine Besonderheit erwähnen: Der übergebene Parameter OpCode bestimmt, welche Daten zurück gegeben werden sollen. Wähle ich ihn so, dass nur ein bool zurück kommt geht alles, soll allerdings ein Struct gelifert werden, so steht in dem Struct nachher nur Müll.
Weiterhin liefert die Funktion den Wert 1734 zurück, also "The array bounds are invalid.". Dazu aber später mehr.

So, nun kommen wir zu meinen bisherigen Versuchen bezüglich der Definition des Prototyps und der notwendigen Structs und Enums.
Prinzipiell habe ich alle Structs und Enums von hier.
Leider gibt es dort genau die gesuchte Funktion QueryProperty nicht... Die musste ich mir selbst zusammenbauen.
Ich poste hier nur kurz meine Definition, im Anhang gibts das komplette Projekt, auch mit allen Structs und Enums.

Mein Versuch:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
[DllImport("Wlanapi.dll", EntryPoint = "WlanHostedNetworkQueryProperty")]
        unsafe internal static extern uint WlanHostedNetworkQueryProperty(
            IntPtr hClientHandle,
            WLAN_HOSTED_NETWORK_OPCODE OpCode,
            out uint pdwDataSize,
            [Out]out void* ppvData,
            [Out]out WLAN_OPCODE_VALUE_TYPE* pWlanOpcodeValueType,
            IntPtr pvReserved
        );

Weiterer Versuch:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
        [DllImport("Wlanapi.dll", EntryPoint = "WlanHostedNetworkQueryProperty")]
        internal static extern uint WlanHostedNetworkQueryProperty(
            IntPtr hClientHandle,
            WLAN_HOSTED_NETWORK_OPCODE OpCode,
            [Out] out uint pdwDataSize,
            [Out] out IntPtr ppvData,
            [Out] out WLAN_OPCODE_VALUE_TYPE pWlanOpcodeValueType,
            IntPtr pReserved
            );


Beide Versionen funktionieren für das Auslesen eines Bools, liefern jedoch unterschiedliche Daten für die Structs (beide Male eher Müll).

Umwandlung der Pointer in ein Struct läuft so:
ausblenden C#-Quelltext
1:
2:
3:
4:
private static T MarshalToStruct<T>(IntPtr buf)
{
    return (T)Marshal.PtrToStructure(buf, typeof(T));
}


Ich bin wirklich verzweifelt und hoffe mir kann hier jemand helfen...
Ich frage normalerweise ungern so um kompletten Code, aber ich habe einfach keine andere Idee mehr... :(

Wer Windows 7 hat, kann auch das Testprogramm aus dem Anhang starten und in die Methode HostedNetworkController.GetStaus() reindebuggen. Dazu einfach dort einen Breakpoint setzen und inder Form auf TestStatus klicken.
Die anderen müssen sich wohl mit dem bloßen Anblick begnügen müssen :wink:

Vielen Dank schonmal im Voraus :)

Fabi

Crosspostings:
Einloggen, um Attachments anzusehen!
Fabian E. Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 554

Windows 7 Ultimate
Visual Studio 2008 Pro, Visual Studion 2010 Ultimate
BeitragVerfasst: Do 12.11.09 08:03 
Kann mir denn wirklich niemand helfen? :(

Fabi