.... und wieder ein Stückchen glücklicher: Auch das Notifing funzt nun !
Wo fange ch mal an ? Am besten mit der eigendlichen Frage: WLAN_CONNECT
Es ist ganz offensichtlich
A) .... ein Fehler in der WLAN-
API für Delphi, die es div. im WEB (mit gleichem Inhalt zu laden gibt.
Ich habe
Diese hier verwendet.
Es ist ein Fehler in der LIB "nduWlanAPI.pas" !
Falsche Parameterdefinition .... so isse's richtig und funzt:
Code:
type
Pndu_WLAN_CONNECTION_PARAMETERS = ^Tndu_WLAN_CONNECTION_PARAMETERS;
Tndu_WLAN_CONNECTION_PARAMETERS = record
wlanConnectionMode: Tndu_WLAN_CONNECTION_MODE;
strProfile: LPCWSTR; // changed by TERWI - remind missing "W" for pointer !
// strProfile: LPCTSTR; // ORIGINAL declared by author
pDot11Ssid: Pndu_DOT11_SSID;
pDesiredBssidList: Pndu_DOT11_BSSID_LIST;
dot11BssType: Tndu_DOT11_BSS_TYPE;
dwFlags: DWORD;
end;
.... ein simples "W" fehlte.
B) .... und die Frage der richtigen Initialisierung. Meine Routine sieht so aus:
Code:
function TMain.WLAN_Connect(ConLast : boolean) : HRESULT;
var
ConPrms : Tndu_WLAN_CONNECTION_PARAMETERS;
Name : WideString;
begin
if NOT Assigned(FpIFDATA) then exit;
if NOT Assigned(FpNWDATA) then exit;
if NOT FIsClient then exit;
if ConLast then
Name := WideString(FpIFDATA.actProfile)
else
Name := WideString(FpNWDATA.actProfile);
ConPrms.wlanConnectionMode := wlan_connection_mode_profile;
ConPrms.strProfile := PWChar(Name);
ConPrms.pDot11Ssid := NIL;
// Windows XP: pDesiredBssidList member must be NULL.
ConPrms.pDesiredBssidList := NIL;
ConPrms.dot11BssType := dot11_BSS_type_any;
// Windows XP: dwFlags must be set to 0
ConPrms.dwFlags := 0;
result := WlanConnect(FhClient,
@FGuid,
@ConPrms,
nil);
if result <> ERROR_SUCCESS then
Memo.Lines.Add('CONNECT - FAILED: ' + IntToStr(result) + ' - ' + GetErrString(result))
else
Memo.Lines.Add('CONNECT - OK ... wait for notify !`');
end;
FhClient und FhClient sind globale var. Dito FpIFDATA, worin Daten aus dem aktuell connecteten Interface/Adapter gehalten werden.
Die Connection Params sind für XP-kompatiblen ausgelegt (mode_profile).
Der Parameter "ConLast" besagt hier, das ich entweder die letzte Verbindung des Adapters oder eine neu gewählte nehme. Hie wird nur ein String für den Profilnamen (der gültig sein muss !) passend zugewiesen.
Funzt nun tadellos.
Später mehr.