Начало работы с Visual Basic
Этот раздел документации помогает начать разработку приложений на Visual Basic.
Начало работы с Visual Basic и .NET Core
Дополнительные сведения
- Новые возможности Visual Basic В этом разделе перечислены новые возможности для каждой из версий Visual Basic .NET.
- Дополнительные ресурсы для программистов, использующих Visual Basic Список веб-сайтов и групп новостей, которые помогут найти ответы на общие вопросы.
См. также
- Получить Visual Basic Ссылки для скачивания версий Visual Studio с поддержкой Visual Basic, включая бесплатные версии.
- Объектно-ориентированное программирование Ссылки на страницы, знакомящие с основами объектно-ориентированного программирования и описывающие порядок создания собственных объектов и их использования для упрощения программирования.
- Примеры Ссылки на примеры кода в Visual Basic.
- Пошаговые руководства Перечень страниц справки, демонстрирующих различные аспекты языка Visual Basic.
- Параметры обратной связи для Visual Studio Способы получения поддержки и обеспечения обратной связи.
- Visual Studio Ссылки на документацию по Visual Studio.
- C# Ссылки на документацию по разработке приложений с помощью Visual C#.
- Visual C++ Ссылки на документацию по Visual C++.
- Разработка Office и SharePoint Сведения об использовании Microsoft Office и Visual Studio в рамках бизнес-приложения.
Как использовать ethernet в visual basic 2010
В следующих таблицах перечислены задачи, связанные с объектом My.Computer.Network .
В этом разделе
Практическое руководство. Отправка файла
Демонстрация отправки файла и сохранения его в удаленном расположении с помощью My.Computer.Network .
Практическое руководство. Скачивание файла
Демонстрация скачивания файла и сохранения его в удаленном расположении с помощью My.Computer.Network .
Практическое руководство. Проверка состояния подключения
Демонстрация проверки наличия рабочего сетевого подключения на компьютере.
VB6 TCP IP-коммуникация без Doevents или подклассов
Что мне нужно сделать с приложением VB6, которое я поддерживаю, так это следующее.
-
Установите соединение с известным адресом и портом через сеть Ethernet.
Я попытался использовать замену WinSock и Winsock, но все они в той или иной форме используют цикл обмена сообщениями, свойственный различным приложениям Windows. Я не знаю достаточно об Winsock API, как реализовать вышеуказанный алгоритм в VB6 (или на любом другом языке).
Мое приложение — это программное обеспечение VB6 CAD / CAM, которое управляет металлорежущими станками через выделенную сеть Ethernet. Программное обеспечение поддерживается уже 20 лет, и мы разработали несколько драйверов для различных типов контроллеров движения. На сегодняшний день API для этих контроллеров движения состоит из
- Открытие соединения с оборудованием
- Отправка запроса на оборудование (например, Положение оси)
- Ожидание ответа (обычно происходит в миллисекундах).
Некоторые из этих контроллеров работают через сеть Ethernet, но до сих пор мне никогда не приходилось напрямую взаимодействовать с портами. Я использовал поставляемые компанией библиотеки для обработки вещей. И они работают так, как я упоминал выше, и выдают ошибку тайм-аута, если ответ не происходит в течение определенного времени.
Проблема с Winsock заключается в том, что мне нужно вставить DoEvents, чтобы получить ответ. Это вызывает хаос в том, как мы справляемся с многозадачностью в нашем приложении VB6. Замена, такая как CSocketMaster, использует подклассы, которые также вызывают хаос с нашей многозадачностью.
Так что любая помощь о том, как использовать Winsock API или стороннюю DLL, которая может делать то, что мне нужно, как описано выше. Я бы не спрашивал, не видел ли я, чтобы другие элементы управления движением делали то, что я хочу.
3 ответа
Ваша проблема в том, что вы используете элемент управления Winsock неправильно. Это, вероятно, связано с недостатком вашей модели взаимодействия.
Не «отправляй и жди», потому что блокировать подобное — твоя большая ошибка. В любом случае, нет никакого «ожидания», если вы не думаете, что сидение в петле гудения ждет.
Вместо этого отправьте запрос и выйдите из этого обработчика событий. Весь ваш код содержится в обработчиках событий, вот как это работает. Затем, когда возникают события DataArrival, вы добавляете новый полученный фрагмент в буфер потока, а затем сканируете собранный поток для получения полного ответа. Затем продолжайте и обработайте ответ.
Обработайте тайм-ауты, используя элемент управления Timer, который вы включаете после отправки. Когда вы собрали законченный ответ, отключите таймер. Если интервал истекает, и событие Timer генерируется, выполните вашу обработку ошибок там.
Кажется, у вас очень болтливый протокол, поэтому вам не нужно больше ничего делать. Например, вы можете просто очистить буфер потока после обработки полного ответа, поскольку в любом случае там не может быть ничего другого.
Забудьте о «многозадачности» и избегайте вызовов DoEvents (), таких как чума.
Это очень простой материал.
Как оказалось, ответ заключался в реализации предложения Аллена.
Конкретная проблема заключалась в связи между двумя устройствами, участвующими в управлении частью машины. Устройство, которое выполняло управление движением, действует как сервер, в то время как ПК, предоставляющий данные движения, был клиентом.
Сеть Ethernet использовалась вместо проприетарного интерфейса шины или последовательного интерфейса RS-232/422. Так что многие из соображений, связанных с обслуживанием данных через широко распространенный Интернет, не были фактором. Сеть состояла из известных устройств с фиксированными IP-адресами, которые прослушивали определенные порты.
После общения с людьми, которые делают другое управление движением. Логика для клиента оказалась на удивление простой.
- Отправить данные
- Подождите в цикле, чтобы ответ вспыхнул, если он занимает слишком много времени.
- Обработка любых ошибок в соединении.
На стороне сервера нам повезло в том, что мы контролировали программное обеспечение, запущенное на контроллере движения. Таким образом, коммуникационная петля была разработана так, чтобы быть максимально быстрой. Одним из ключевых моментов было держать все данные ниже 512 байт, чтобы они все содержались в одном пакете. Они также уделяли большое внимание установлению приоритета обработчику связи и структуре данных, чтобы он мог отправлять ответ за десятки микросекунд.
Другой момент состоял в том, что в этом приложении выделенных клиентов и серверов UDP предпочтительнее, чем TCP, поскольку операционные системы, в частности Windows, неожиданно отключали неактивные TCP-соединения.
Потому что клиентское программное обеспечение постепенно переходит на .NET Framework, что было еще одним фактором для реализации идеи Аллена. Библиотека, обсуждаемая @wqw, работала также.
Ознакомьтесь с репозиторием VbAsyncSocket на github для реализации чистых асинхронных сокетов VB6 (используя WSAAsyncSelect API для сокетов для публикации события уведомления ) .
Вопреки своему названию класс поддерживает поддержку SyncSendArray и > методы для синхронных операций — без DoEvents , но с Timeout s.
Другой вариант — использовать cTlsClient класс, который может подключаться к хосту / устройству через tcp (здесь нет udp) и предоставляет методы ReadText / WriteText и ReadArray / WriteArray (синхронно). Дополнительное преимущество заключается в том, что класс поддерживает как обычные незашифрованные сокеты, так и зашифрованные каналы SSL, если это необходимо.
Мы используем эти классы для (синхронного) доступа к принтерам ESP / POS из наших LOB-приложений. Большинство принтеров POS также предоставляют последовательные (USB-COM) ссылки, поэтому мы абстрагируем наши классы доступа с разъемами — SyncWaitForEvent через асинхронные сокеты и WaitForMultipleObjects на перекрывающихся API ReadFile / WriteFile (о, ирония судьбы)
Обращение к оборудованию через сеть
Обращение к COM компоненте через сеть
Здравствуйте, может кто встречался. Есть 1с 8.3. Архитектура клиент — серверная, но все пока.
Передача данных через COM — порт. Подключение к оборудованию
Здравствуйте. У меня задача, написать программу для удаленного управления Аким 1303. Я установил.
Запретить прямое обращение к скрипту, но разрешить обращение через RewriteEngine
основной файл у меня index.php и в нем уже определяется какой файл подключить, к примеру .
Не получается раздовать интернет через PPPoE сеть 1 в локальную сеть 2
пытался настроить сетевухи по этой http://ru.d-ws.biz/articles/ics-from-windows-7.shtml инструкции.
Сообщение от _Лёша_
Сообщение от dimasamchenko
vandoren, а Вы сами описания читали.
Вот пример
vandoren, TCPClient & Server :
Очень мало отправных данных. Ладно, порт на который слать нам известен, а на какой получать ответ. Так же не известно, использует ли программа, к которой мы обращаемся сокеты? В мануале написано, что прежде чем посылать команды надо ввести пароль! Как его передать. По той же схеме? В общем, без этого и не имея этого оборудования под рукой о чем-либо говорить сложно.
Добавлено через 45 минут
В общем вот на синхронных сокетах вариант, щас еще без сокетов навояю на всякий, но лучше уточнить все вопросы, которые я задавал выше, т.к. без этого никуда.
| jerome Socets.zip (193.4 Кб, 56 просмотров) |
| jerome listner.zip (36.8 Кб, 74 просмотров) |
Сообщение от _Лёша_
Да я и не сомневаюсь что проги работают, сам что-то не так делаю наверно.
В коде проги с сокетами пробовал менять порт в двух местах в строчке Dim remoteEP As New IPEndPoint(ipAddress.Any, 23)
В консольных прогах менял порт в строчке Dim listener As TcpListener = New TcpListener(IPAddress.Any, 23) для сервера и в строке tc.Connect(ip, 23) для клиента.
Проверял на железке с которой работаю. Через Гипертерминал, WinFIOL или просто через телнет все работает. Порт указывается один и тот же что на входящее, что на исходящее соединение.
Сообщение от _Лёша_
Леш, все работает если ввожу свой локальный айпишник или 127.0.0.1
Добавлено через 16 минут
пробовал просто между двумя компами, тоже все работает.
На оборудование авторизоваться нужно сначала, может в этом проблема?
При соединении, например через Hyper Terminal, оно выдает приглашение на ввод логина, пароля. Почему в нашем случае я никакого приглашения не получаю?
Добавлено через 34 минуты
Продолжаем эксперименты.
Имеются два компа, на одном из них установил и запустил telnet сервер от Goodtechsystem, на втором компе наша прога. Результат — прога никак не реагирует на телнет-сервер, а гипертерминал и встроенный в винду телнет-клиент (cmd->telnet ) на втором компе где запускается наша прога при соединении получают приглашения на авторизацию. Как подружить прогу и телнет-сервер?
Как подключить MSFlxGrd из vb6 к vb 2010
Как подключить MSFLXGRD
Загрузил с инета Флексгрид, закинул в сис32. Захожу в студию, клацаю правой кнопкой по п/и.
Как подключить MSDN к VB6
Как подключить MSDN к VB6 Невозможно работать без нормальной подсказки. Лучше установить его на.
Как подключить драйвер в VB6
Пыталась подключиться к таблице БД на Clarion,но VB требует подключить драйвер. Как это сделать?
Как подключить в VB6 БД созданную Access 2000
Как подключить в VB6 БД созданную Access 2000, при нажатии на RecordSource выдает — Unrecognized.
такс.
1) Скачиваем msflxgrd.ocx если его нет в системе. У меня не было на 7ке.
2) помещаем его в C:\Windows\System32\msflxgrd.ocx (ну или иной путь системы)
3) с консоли выполняем regsvr32 «C:\Windows\System32\msflxgrd.ocx» для регистрации компонента в системе. Нам вывалится сообщение об успешной регистрации.
4) в студии клацаем правой кнопкой на панели с доступными элементами управления правой кнопкой и в появившемся диалоге выбираем во вкладке COM компоненты «Microsoft FlexGrid Control, version 6.0»
5) Помещаем его на форму.
Пункты 4 и 5 разрисованы (см. вложение)
Похоже, что потом этот OCX придется таскать с собой (с программой) и, возможно, регистрировать в системе, где будет использоваться программа (см. пункт 3 в списке, только путь к нему буде иным). Или собирать инсталлятор.
Похожие публикации:
- Как сделать картинки по центру в css
- Как сделать картинку черно белой css
- Как сделать кнопку по центру css
- Как сделать круг вокруг иконки css
Интерфейсы (Visual Basic)
Интерфейсы определяют свойства, методы и события, которые можно реализовать в классах. Интерфейсы позволяют определить возможности в виде небольших групп тесно связанных свойств, методов и событий. Это снижает число проблем совместимости, так как можно создавать усовершенствованные реализации интерфейсов без изменения существующего кода. Вы можете добавлять новые функции в любое время с помощью дополнительных интерфейсов и реализаций.
Далее представлены другие причины, из-за которых вам может потребоваться использовать интерфейсы вместо наследования классов.
- Интерфейсы более удобны в ситуациях, в которых приложениям требуется множество возможно несвязанных типов объектов для предоставления определенных возможностей.
- Интерфейсы более гибкие, чем базовые классы, так как вы можете определить одну реализацию, в которой можно реализовать несколько интерфейсов.
- Интерфейсы предпочтительнее в случаях, в которых нет необходимости наследовать реализацию базового класса.
- Интерфейсы полезны, когда невозможно использовать наследование класса. Например, структуры не могут наследовать от классов, но они могут реализовывать интерфейсы.
Объявление интерфейсов
Определения интерфейса заключаются в операторы Interface и End Interface . После оператора Interface можно добавить необязательный оператор Inherits , в котором указывается один или несколько наследуемых интерфейсов. Операторы Inherits должны предшествовать всем другим операторам в объявлении, за исключением комментариев. Остальными операторами в определении интерфейса должны быть Event , Sub , Function , Property , Interface , Class , Structure и Enum . Интерфейсы не могут содержать код реализаций или операторы, связанные с кодом реализации, такие как End Sub и End Property .
В пространстве имен операторы интерфейса по умолчанию относятся к типу Friend , но также их можно явно объявить как Public или Friend . Интерфейсы, определенные в классах, модулях, интерфейсах и структурах по умолчанию объявлены как Public , но их также можно явно объявить как Public , Friend , Protected и Private .
Ключевое слово Shadows может применяться ко всем элементам интерфейса. Ключевое слово Overloads слово может применяться к операторам Sub , Function , и Property , объявленным в определении интерфейса. Кроме того, операторы Property могут содержать модификаторы Default , ReadOnly и WriteOnly . Другие модификаторы ( Public , Private , Friend , Protected , Shared , Overrides , MustOverride и Overridable ) не разрешены. Дополнительные сведения см. в разделе Контексты объявления и уровни доступа по умолчанию.
Например, в следующем примере кода определяется интерфейс с одной функцией, одним свойством и одним событием.
Interface IAsset Event ComittedChange(ByVal Success As Boolean) Property Division() As String Function GetID() As Integer End Interface
Реализация интерфейсов
Зарезервированное слово Implements Visual Basic используется двумя способами. Оператор Implements означает, что класс или структура реализуют интерфейс. Ключевое слово Implements указывает, что элемент класса или структуры реализует определенный элемент интерфейса.
Оператор Implements
Если класс или структура реализует один или несколько интерфейсов, они должны содержать оператор Implements сразу после оператора Class или Structure . Оператору Implements требуется разделенный запятыми список интерфейсов, которые должны быть реализованы с помощью класса. Структура или класс должны реализовать все элементы интерфейса с помощью ключевого слова Implements .
Ключевое слово Implements
Ключевому слову Implements требуется разделенный запятыми список элементов интерфейса, которые необходимо реализовать. Как правило, указывается только один элемент интерфейса, но можно указать несколько элементов. Спецификация элемента интерфейса состоит из имени интерфейса, которое должно быть указано в операторе implements внутри класса, точки и имени реализуемой функции-члена, свойства или события. Имя члена, реализующего член интерфейса, может использовать любой юридический идентификатор и не ограничивается InterfaceName_MethodName соглашением, используемым в более ранних версиях Visual Basic.
Например, в следующем примере кода показано, как объявить подпрограмму с именем Sub1 , в которой реализуется метод интерфейса:
Class Class1 Implements interfaceclass.interface2 Sub Sub1(ByVal i As Integer) Implements interfaceclass.interface2.Sub1 End Sub End Class
Типы параметров и типы возвращаемого значения элемента реализации должны соответствовать объявлению свойства или элемента в интерфейсе. Наиболее распространенный способ реализации элемента интерфейса — использование элемента с таким же, как у интерфейса, именем, как показано в предыдущем примере.
Для объявления реализации метода интерфейса можно использовать любые атрибуты, которые допустимы в объявлении метода экземпляра, включая Overloads , Overrides , Overridable , Public , Private , Protected , Friend , Protected Friend , MustOverride , Default и Static . Атрибут Shared недопустим, поскольку он определяет класс, а не метод экземпляра.
С помощью Implements можно также написать один метод, который реализует несколько методов, определенных в интерфейсе, как показано в следующем примере:
Class Class2 Implements I1, I2 Protected Sub M1() Implements I1.M1, I1.M2, I2.M3, I2.M4 End Sub End Class
Закрытый элемент можно использовать для реализации члена интерфейса. Если закрытый член реализует член интерфейса, этот элемент становится доступен через интерфейс, хотя он недоступен напрямую через переменные класса.
Примеры реализации интерфейсов
Классы, реализующие интерфейс, должны реализовать все свойства, методы и события.
В примере ниже определены два интерфейса. Второй интерфейс, Interface2 , наследует Interface1 и определяет дополнительное свойство и метод.
Interface Interface1 Sub sub1(ByVal i As Integer) End Interface ' Demonstrates interface inheritance. Interface Interface2 Inherits Interface1 Sub M1(ByVal y As Integer) ReadOnly Property Num() As Integer End Interface
В следующем примере реализуется Interface1 , интерфейс, определенный в предыдущем примере:
Public Class ImplementationClass1 Implements Interface1 Sub Sub1(ByVal i As Integer) Implements Interface1.sub1 ' Insert code here to implement this method. End Sub End Class
В последнем примере реализуется Interface2 , включающий метод, унаследованный от Interface1 :
Public Class ImplementationClass2 Implements Interface2 Dim INum As Integer = 0 Sub sub1(ByVal i As Integer) Implements Interface2.sub1 ' Insert code here that implements this method. End Sub Sub M1(ByVal x As Integer) Implements Interface2.M1 ' Insert code here to implement this method. End Sub ReadOnly Property Num() As Integer Implements Interface2.Num Get Num = INum End Get End Property End Class
Можно реализовать свойство только для чтения со свойством, доступным для чтения и записи (т. е. не нужно объявлять его свойством только для чтения в классе реализации). В реализации интерфейса должны быть по крайней мере реализованы элементы, которые объявляются интерфейсом, но можно обеспечить дополнительные возможности, например разрешить запись свойства.
См. также
| Заголовок | Описание |
|---|---|
| Пошаговое руководство. Создание и реализация интерфейсов | Содержит подробные процедуры, которые помогут вам определить и реализовать собственный интерфейс. |
| Вариативность в универсальных интерфейсах | В этом разделе описываются ковариация и контрвариация в универсальных интерфейсах, а также представлен список вариативных универсальных интерфейсов платформы .NET Framework. |
Определение состояния подключения локальной системы и способов инициации или завершения подключения к Интернету с помощью Visual Basic .NET или Visual Basic 2005
В этой статье показано, как определить состояние подключения локальной системы и как инициировать или завершить подключение к Интернету с помощью Visual Basic .NET или Visual Basic 2005.
Оригинальная версия продукта: Visual Studio
Исходный номер базы знаний: 821770
Аннотация
В этой пошаговой InternetGetConnectedState статье описывается, как определить подключенное состояние локальной системы с помощью функции, которую предоставляет API Microsoft Windows Internet (WinINet). В этой статье также описывается InternetDial WinINet , как инициировать подключение к Интернету и как завершить подключение к Интернету с помощью функции API InternetHangUp WinINet и функции API.
WinINet API — это набор функций, позволяющих приложениям взаимодействовать с Gopher, протоколом FTP и протоколом HTTP для доступа к нескольким ресурсам в Интернете. Функция InternetGetConnectedState возвращает значение True или False в зависимости от того, существует ли соединение. После вызова функции InternetGetConnectedState параметр lpdwFlags содержит предопределенное значение, которое предоставляет дополнительные сведения о подключении. Например, значение, содержащееся в IpdwFlags , может указывать на то, что подключением является локальное сетевое подключение, модемное подключение или другое подключение. Можно определить, существует ли соединение из возвращаемого значения функции InternetGetConnectedState .
Когда вызов InternetGetconnectionState функции возвращает значение True, существует сетевое подключение. Однако это не гарантирует, что у вас есть доступ к данным или доступ к веб-сайтам по сети.
Функция InternetDial инициирует подключение к Интернету с помощью модема. Параметр lpszConnectoid указывает имя соединения с абонентом, которое использует InternetDial функция. С помощью функции InternetHangUp WinINet API можно указать модему завершить подключение, указанное параметром dwConnection .
Пошаговый пример
- Запустите Microsoft Visual Studio .NET или Microsoft Visual Studio 2005.
- В меню Файл выберите пункт Создать и затем пункт Проект.
- В разделе «Типы проектов» щелкните «Проекты Visual Basic».
Примечание. В Visual Studio 2005 щелкните Visual Basic в разделе «Типы проектов».
Private Declare Function InternetGetConnectedState Lib "wininet.dll" (ByRef lpdwFlags As Int32, _ ByVal dwReserved As Int32) As Boolean Private Declare Function InternetDial Lib "Wininet.dll" (ByVal hwndParent As IntPtr, _ ByVal lpszConnectoid As String, ByVal dwFlags As Int32, ByRef lpdwConnection As Int32, _ ByVal dwReserved As Int32) As Int32 Private Declare Function InternetHangUp Lib "Wininet.dll" _ (ByVal lpdwConnection As Int32, ByVal dwReserved As Int32) As Int32 Private Enum Flags As Integer 'Local system uses a LAN to connect to the Internet. INTERNET_CONNECTION_LAN = &H2 'Local system uses a modem to connect to the Internet. INTERNET_CONNECTION_MODEM = &H1 'Local system uses a proxy server to connect to the Internet. INTERNET_CONNECTION_PROXY = &H4 'Local system has RAS installed. INTERNET_RAS_INSTALLED = &H10 End Enum 'Declaration Used For InternetDialUp. Private Enum DialUpOptions As Integer INTERNET_DIAL_UNATTENDED = &H8000 INTERNET_DIAL_SHOW_OFFLINE = &H4000 INTERNET_DIAL_FORCE_PROMPT = &H2000 End Enum Private Const ERROR_SUCCESS = &H0 Private Const ERROR_INVALID_PARAMETER = &H87 Private mlConnection As Int32
Dim lngFlags As Long If InternetGetConnectedState(lngFlags, 0) Then 'connected. If lngFlags And Flags.INTERNET_CONNECTION_LAN Then 'LAN connection. MsgBox("LAN connection.") ElseIf lngFlags And Flags.INTERNET_CONNECTION_MODEM Then 'Modem connection. MsgBox("Modem connection.") ElseIf lngFlags And Flags.INTERNET_CONNECTION_PROXY Then 'Proxy connection. MsgBox("Proxy connection.") End If Else 'not connected. MsgBox("Not connected.") End If
Dim DResult As Int32 DResult = InternetDial(Me.Handle, "My Connection", DialUpOptions.INTERNET_DIAL_FORCE_PROMPT, mlConnection, 0) If (DResult = ERROR_SUCCESS) Then MessageBox.Show("Dial Up Successful", "Dial-Up Connection") Else MessageBox.Show("UnSuccessFull Error Code" & DResult, "Dial-Up Connection") End If
Примечание. Замените «Мое подключение» именем подключения на компьютере.
Dim Result As Int32 If Not (mlConnection = 0) Then Result = InternetHangUp(mlConnection, 0&) If Result = 0 Then MessageBox.Show("Hang up successful", "Hang Up Connection") Else MessageBox.Show("Hang up NOT successful", "Hang Up Connection") End If Else MessageBox.Show("You must dial a connection first!", "Hang Up Connection") End If
Проверка работы TT
- Запустите приложение, созданное в разделе » Пошаговый пример» этой статьи. Отобразится форма 1.
- Нажмите кнопку «Обнаружить подключение«, а затем обратите внимание на текущее состояние подключения локального компьютера.
- Нажмите кнопку «Нажать вверх». Отобразится диалоговое окно подключения с подключением.
- Нажмите кнопку «Зависнуть». Подключение к Интернету, установленное на шаге 3, заканчивается.
Ссылки
Дополнительные сведения см. на следующих веб-сайтах:
- Сведения о WinINet
- Функции WinINet
- Функция InternetGetConnectedState (winineti.h)
- Функция InternetDial (winineti.h)
- Функция InternetHangUp (winineti.h)
