|   Сделать стартовой  |    На главную| Чат | Гостевая книга | Форум 
        www.IqSoft.narod.ru      
                 Найти: на

                                                                                                    

Преобразование ваших проектов из VB6 в VB.NET : Windows API

Во многих вызовах API функций, используемых в Visual Basic 6.0, придется корректировать типы данных соответственно новому стандарту. Поскольку в VB 6.0, тип данных Long соответствует типу Integer в VB.NET, а тип Integer из VB6 новому типу Short. Эти изменения сделаны для облегчения использования API функций в ваших приложениях. Смотрите пример:

Private Declare Function GetVersion Lib "kernel32" () As Long
Function GetVer()
    Dim Ver As Long
    Ver = GetVersion()
    MsgBox ("Версия Windows " & Ver)
End Function

Заменяем на:

Private Declare Function GetVersion Lib "kernel32" () As Integer
Function GetVer()
    Dim Ver As Integer
    Ver = GetVersion()
    MsgBox("Версия Windows " & Ver)
End Function

В добавок к изменённым числовым типам данных, изменён и тип String, в VB 6.0 строка могла быть фиксированной длинны, а теперь это не поддерживается и Вам придется обращаться к классу String для установки длинны строки. Смотрите пример:

Private Declare Function GetUserName Lib "advapi32.dll" _
			Alias "GetUserNameA" _
			(ByVal lpBuffer As String, _
			ByRef nSize As Long) As Long
Function GetUser()
    Dim Ret As Long
    Dim UserName As String
    Dim Buffer As String * 25
    Ret = GetUserName(Buffer, 25)
    UserName = Left$(Buffer, InStr(Buffer, Chr(0)) - 1)
    MsgBox (UserName)
End Function

возможно самый простой вариант для последующего преобразования, сейчас создавать строки фиксированной длинны, состоящей из 25 символов, например так:

    Dim Buffer As String
    Buffer = String$(25, " ")

Вот как будет выглядеть в Visual Basic.NET :

Declare Function GetUserName Lib "advapi32.dll" _
			Alias "GetUserNameA" _
			(ByVal lpBuffer As String, _
			ByRef nSize As Integer) As Integer
Function GetUser()
    Dim Ret As Integer
    Dim UserName As String
    Dim Buffer As String
    Buffer = New String(CChar(" "), 25)
    Ret = GetUserName(Buffer, 25)
    UserName = Left(Buffer, InStr(Buffer, Chr(0)) - 1)
    MsgBox(UserName)
End Function

В некоторых случаях, Visual Basic.NET позволяет лучше передавать дескриптор строк API функциям, Вы можете произвольно объявлять то как хотите использовать строку, как ANSI или как UNICODE символы.

Есть три случая, когда Вы должны будите сделать некоторые изменения. Во первых, передаче API функции пользовательский типов данных содержащих строки фиксированной длинны или массив байтов. В VB.NET Вы должны будите изменить свой код, добавив атрибуты (из System.Runtime.InteropServices) к каждой строке фиксированной длины или байтовому массиву. Во вторых использование при объявление функции переменной типа As Any, не поддерживается в VB.NET. Переменные типа As Any часто используются для передачи строк или пустых указателей (Null); Вы можете заменить используемое в VB 6.0 объявление функции на два, одно с Long, другое со String. Для примера рассмотрим параметр lpKeyName, функции GetPrivateProfileString, он имеет тип As Any:

Private Declare Function GetPrivateProfileString Lib "kernel32" _
			Alias "GetPrivateProfileStringA" _
			(ByVal lpApplicationName As String, _
			ByVal lpKeyName As Any, _
			ByVal lpDefault As String, _
			ByVal lpReturnedString As String, _
			ByVal nSize As Long, _
			ByVal lpFileName As String) As Long

Вы удаляете объявление с типом As Any, заменяя его на две версии объявления с Long и String:

Private Declare Function GetPrivateProfileStringKey Lib "kernel32" _
			Alias "GetPrivateProfileStringA" _
			(ByVal lpApplicationName As String, _
			ByVal lpKeyName As String, _
			ByVal lpDefault As String, _
			ByVal lpReturnedString As String, _
			ByVal nSize As Long, _
			ByVal lpFileName As String) As Long

Private Declare Function GetPrivateProfileStringNullKey Lib "kernel32" _
			Alias "GetPrivateProfileStringA" _
			(ByVal lpApplicationName As String, _
			ByVal lpKeyName As Long, _
			ByVal lpDefault As String, _
			ByVal lpReturnedString As String, _
			ByVal nSize As Long, _
			ByVal lpFileName As String) As Long

Когда Вы хотите передать функции пустой указатель, используйте версию GetPrivateProfileStringNullKey. Имейте введу, что делая подобное преобразование вызовов функций Вам все ровно придётся, при переходе на Visual Basic.NET, так что лучше делать это уже сейчас.

И наконец, Вы должны будите сделать некоторые изменения если используете API для создания потоков, субкластинга, ловушек и т.д. Некоторые из этих функций вызовут ошибку периода время выполнения (run-time error) в Visual Basic.NET. Многие API функции имеют эквивалент в Visual Basic.NET или в структуре .NET. Вы должны будите изменять их от случая к случаю.

   

 

 

 

                                                                   ОБСУДИТЬ СТАТЬЮ НА ФОРУМЕ

  Словарь       Яндекс.Лингво

   

  Сделать стартовой     

Программирование
 -  Основы Visual Basic
 -  Visual Basic
 -  Кирпичики для  VB
 -  Visual Basic 6.0 избранное
 -  API
Разное
 -  БЕЗОПАСНОСТЬ INTRANET
- Политика безопасности для электронной почты.
 - Сравнительная характеристика Internet Explorer и Netscape Navigator
 - Как подключить к Интернету несколько компьютеров через один модем
 -  Мифы компьютерной безопасности
 -  Оптимизация Windows 98.
 - ЧТО ПОМHИТ КОМПЬЮТЕР?
 - О НЕКОТОРЫХ МЕТОДАХ ОБНАРУЖЕНИЯ ЗАКЛАДОЧНЫХ УСТРОЙСТВ
- Хакеры или кракеры "Что такое хорошо и что такое плохо?"
 - Атака из сети
                                                            Нам весьма интересны любые Ваши предложения о сотрудничестве.

                         

 

  Дизайн: Кулишов Андрей
Напишите мне
Hosted by uCoz