спасибо за исправление ошибки № 2

аюсь создать профиль WLAN и подключиться к нему с помощью Native WiFi (https://managedwifi.codeplex.com/). Я могу просмотреть весь список BSS сети и их параметры. Однако, когда я пытаюсь создать / перезаписать профиль WLAN, я получаю следующее сообщение об ошибке (Ошибка № 1):

Произошло необработанное исключение типа «System.ComponentModel.Win32Exception» в ManagedWifi.dll.

Дополнительная информация: Профиль сетевого подключения поврежден

Однако, когда я обычно создал профиль из «Центра управления сетями и общим доступом» панели управления Windows 7, а затем попытался подключиться с помощью ManagedWiFi, я получил другое сообщение об ошибке (Ошибка № 2):

Необработанное исключение типа «System.ArgumentException» произошло в mscorlib.dll

Дополнительная информация: Тип 'NativeWifi.Wlan + WlanReasonCode' нельзя маршалировать как неуправляемую структуру; никакой значимый размер или смещение не могут быть вычислены.

Я заметил, что эта ошибка возникает, даже если я пытаюсь подключиться / отключиться от профиля WLAN из «Центра управления сетями и общим доступом» с приложением Windows, работающим в фоновом режиме.

Вот пример кода, который я использую:

Dim profileName As String = GlobalVariables.ssidname          ' Provides the selected SSID name from the Network BSS List 
Dim hexval As String = StringToHex(GlobalVariables.ssidname)  ' Function to get the hexadecimal value for a provided string
Dim key As String = TextBox1.Text                             ' Security key from the textbook provided

Dim profileXml As String = String.Format("<?xml version=""1.0""?><WLANProfile xmlns=""http://www.microsoft.com/networking/WLAN/profile/v1""><name>{0}</name><SSIDConfig><SSID><hex>{1}</hex><name>{0}</name></SSID></SSIDConfig><connectionType>ESS</connectionType><MSM><security><authEncryption><authentication>open</authentication><encryption>WEP</encryption><useOneX>false</useOneX></authEncryption><sharedKey><keyType>networkKey</keyType><protected>false</protected><keyMaterial>{2}</keyMaterial></sharedKey><keyIndex>0</keyIndex></security></MSM></WLANProfile>", 'GlobalVariables.ssidname, hexval, TextBox1.Text)            
wlanIface.SetProfile(Wlan.WlanProfileFlags.AllUser, profileXml, True)  'Error#1 occurs here
wlanIface.Connect(Wlan.WlanConnectionMode.Profile, Wlan.Dot11BssType.Any, profileName)   'Error#2 occurs here

С форума "Тип Native Wifi. Wlan + WlanReasonCode не может быть ошибка маршалинг", проблема (Ошибка № 2), кажется, находится в WlanAPI.cs, где есть строка кода, которая проверяет размер кода возврата. Это строка:

int expectedSize = Marshal.SizeOf(typeof(Wlan.WlanReasonCode));
if (notifyData.dataSize >= expectedSize)
{
    Wlan.WlanReasonCode reasonCode = (Wlan.WlanReasonCode)Marshal.ReadInt32(notifyData.dataPtr);
    if (wlanIface != null)
        wlanIface.OnWlanReason(notifyData, reasonCode);
}

Изменение вышеуказанного кода на приведенное ниже, похоже, решает проблему.

//int expectedSize = Marshal.SizeOf(typeof(Wlan.WlanReasonCode));
if (notifyData.dataSize >= 0)
{
    Wlan.WlanReasonCode reasonCode = (Wlan.WlanReasonCode)Marshal.ReadInt32(notifyData.dataPtr);
    if (wlanIface != null)
        wlanIface.OnWlanReason(notifyData, reasonCode);
}

Однако я не уверен, как добавить это исправление в мое решение. Я установил ManagedWiFi из диспетчера пакетов NuGet. Следовательно, не уверен, как изменить файл WlanApi.cs. Любая помощь в отношении вышеупомянутых двух вопросов очень ценится.

Ответы на вопрос(1)

Ваш ответ на вопрос