Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: ByVal ПОЛЬЗОВАТЕЛЬСКИЙ ТИП. СРОЧНО!!!!!! Добавлено: 29.01.04 22:04  

Автор вопроса:  Диман | Web-сайт: www.dimon1int.narod.ru | ICQ: 224590251 

Нужно срочно передать в функцию в качетсве аргумента объект пользовательского типа. Казалось бы ничего, но ВБ ругается, если я передаю ему объект такого рода. Тип вроде бы совпадает:

ExecuteCommand(ThisScript.bpAllIfStructs(StructNum).bpCode(i))

Говорит, что необходима переменная в качестве аргумента.

Я попробовал byVal, но он говорит что пользовательские типы нельзя.

Object'ы не предлагать! Если предлагать, то объясните, а то я пробовал и с ними всё равно не пашет. Может что не так делаю?

Ответы

Ответить

  Ответы Всего ответов: 8  

Номер ответа: 1
Автор ответа:
 NeForm@t



ICQ: 252999255 

Вопросов: 36
Ответов: 247
 Web-сайт: g--k.newmail.ru
 Профиль | | #1
Добавлено: 29.01.04 22:27

а как ты объявляешь структуру?

Надо примерно так:

Private Type MyType

a as long

b as string

end type

dim MyType1 as MyType

Ответить

Номер ответа: 2
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #2 Добавлено: 29.01.04 23:00

Была у меня такая ерунда!

Я выкрутился таким образом: Пользовательские типы запихал в dll-ку,подклучил её к проекту и передавал их как угодно. Хоть ByVal, хоть ByRef. Другими прийдется тебе создавать библиотеку типов.

Ответить

Номер ответа: 3
Автор ответа:
 Диман



ICQ: 224590251 

Вопросов: 29
Ответов: 64
 Web-сайт: www.dimon1int.narod.ru
 Профиль | | #3
Добавлено: 29.01.04 23:30
'Для компилирования, транслирования и анализирования скриптов:Public Enum ThisVarType 'Тип переменных bpNone = 0 'Неизвестный bpBool = 1 'Булевский тип bpInt = 2 'Целочисленный тип bpChar = 3 'Символьный типEnd EnumPublic Enum CompareMethod 'Метод сравнения bpNone = 0 'Неизвестный bpEquivalent = 1 'Равно bpNotEquivalent = 2 'Не равно bpMore = 3 'Больше bpLess = 4 'Меньше bpMoreOrEq = 5 'Больше или равно bpLessOrEq = 6 'Меньше или равноEnd EnumPublic Enum Commands 'Встроенные функции BFSL bpNone = 0 'Неизвестный bpIf = 1 'Условная конструкция bpFor = 2 'Циклический алгоритм bpTransmitVar = 3 'Передача переменной bpTransmitText = 4 'Передача текстовой информации bpWaitfor = 5 'Ожидание определенной информации bpWaitany = 6 'Ожидание любой информации bpFopen = 7 'Открытие файла журнала bpFclose = 8 'Закрытие файла журнала bpFwrite = 9 'Запись в файл bpFget = 10 'Прочитать информацию bpSwitch = 11 'Переключение bpHalt = 12 'Завершить работу и выдать текущие логин и пароль bpReconnect = 13 'Соединиться заново bpRestart = 14 'Запустить скрипт заново bpToTerminal = 15 'Перенаправление всей входящей информации на терминал bpCompleting = 16 'Присваивание bpConnect = 17 'Подключиться bpDisconnect = 18 'Отключиться bpIncrement = 19 'Инкремент bpDecrement = 20 'Декремент bpGoto = 21 'Безусловный переходEnd EnumPublic Type Variable 'Описание переменной bpVarName As String 'Имя переменной bpVarType As ThisVarType 'Тип переменной bpValue As String 'Текущее значениеEnd TypePublic Enum Operation 'Операция bpNone = 0 'Неизвестный bpFunc = 1 'Функция bpImport = 2 'Импортируемая функция bpComplete = 3 'Присваивание bpStructure = 4 'СтруктураEnd Enum'7 901 9411456Public Type ExtParam bpTypesParams As ParamType 'Типы параметров bpAsFunc As New ParamCodeLine 'Возврат из функции bpTextParam As Variant 'Значение функции bpAsVar As Variant 'Значение переменнойEnd TypePublic Type CodeLine bpOperation As Operation 'Операция bpCommand As Commands 'Команда или ссылка bpParams() As Variant 'Параметры функции bpExtendedParams() As ExtParam 'Расширенные параметры bpReturn As String 'Переменная возврата bpImportName As String 'Имя импортируемой функцииEnd TypePublic Type Comparation bpVariable As String 'Сравниваемая переменная bpValue As String 'С чем сравниваем bpOperator As CompareMethod 'Метод сравнения bpExtValue As ExtParam 'Расширенное сравнениеEnd TypePublic Type IfStruct 'Условная структура bpComparation As Comparation 'Сравнение bpCompareNumber As Integer 'Сколько сравнений bpIsElse As Boolean 'Есть ли обратное условие bpCode() As CodeLine 'Код при истинности условия bpElseCode() As CodeLine 'Код при ложном условииEnd TypePublic Type SwtchStruct 'Структура стрелки bpVariable As Variable 'Переменная bpValues() As String 'Свойства bpCaseNumber() As Integer 'Количество строк кода для вариантов bpCode() As CodeLine 'Код... bpCasesCount As Integer 'Количество вариантовEnd TypePublic Enum ParamType 'Тип параметра bpNone = 0 'Неизвестный bpFuncResult = 1 'Как результат функции bpVar = 2 'Переменная bpValue = 3 'ЗначениеEnd EnumPublic Type LabelEdit 'Метка LabelName As String 'Имя метки LabelLine As Long 'Линия меткиEnd TypePublic Type ForStruct 'Циклическая структура bpTake As CodeLine 'Присваивание bpValues As Comparation 'Сравнение bpCounter As Variable 'Счётчик bpIsIncrement As CodeLine 'Операция bpCode() As CodeLine 'Код циклаEnd TypePublic Type Program 'Транслируемая программа полностью bpProgramVars() As Variable 'Все глобальные переменные bpLabels() As LabelEdit 'Метки bpAllCode() As CodeLine 'Код программы bpAllIfStructs() As IfStruct 'Все условные конструкции bpIfStructsCount As Integer 'Количество условных конструкций bpIfStructsFound As String 'Конфигурация условных конструкций bpAllSwStructs() As SwtchStruct 'Все конструкции стрелки bpSwStructsCount As Integer 'Количество конструкций стрелки bpSwStructsFound As String 'Конфигурация конструкций стрелки bpAllForStructs() As ForStruct 'Количество циклов bpForStructsCount As Integer 'Количество циклических структур bpForStructsFound As String 'Конфигурация циклических конструкцийEnd TypePublic ThisScript As Program 'Этот скрипт

Ответить

Номер ответа: 4
Автор ответа:
 Диман



ICQ: 224590251 

Вопросов: 29
Ответов: 64
 Web-сайт: www.dimon1int.narod.ru
 Профиль | | #4
Добавлено: 29.01.04 23:43
'Для компилирования, транслирования и анализирования скриптов:Public Enum ThisVarType 'Тип переменных bpNone = 0 'Неизвестный bpBool = 1 'Булевский тип bpInt = 2 'Целочисленный тип bpChar = 3 'Символьный типEnd EnumPublic Enum CompareMethod 'Метод сравнения bpNone = 0 'Неизвестный bpEquivalent = 1 'Равно bpNotEquivalent = 2 'Не равно bpMore = 3 'Больше bpLess = 4 'Меньше bpMoreOrEq = 5 'Больше или равно bpLessOrEq = 6 'Меньше или равноEnd EnumPublic Enum Commands 'Встроенные функции BFSL bpNone = 0 'Неизвестный bpIf = 1 'Условная конструкция bpFor = 2 'Циклический алгоритм bpTransmitVar = 3 'Передача переменной bpTransmitText = 4 'Передача текстовой информации bpWaitfor = 5 'Ожидание определенной информации bpWaitany = 6 'Ожидание любой информации bpFopen = 7 'Открытие файла журнала bpFclose = 8 'Закрытие файла журнала bpFwrite = 9 'Запись в файл bpFget = 10 'Прочитать информацию bpSwitch = 11 'Переключение bpHalt = 12 'Завершить работу и выдать текущие логин и пароль bpReconnect = 13 'Соединиться заново bpRestart = 14 'Запустить скрипт заново bpToTerminal = 15 'Перенаправление всей входящей информации на терминал bpCompleting = 16 'Присваивание bpConnect = 17 'Подключиться bpDisconnect = 18 'Отключиться bpIncrement = 19 'Инкремент bpDecrement = 20 'Декремент bpGoto = 21 'Безусловный переходEnd EnumPublic Type Variable 'Описание переменной bpVarName As String 'Имя переменной bpVarType As ThisVarType 'Тип переменной bpValue As String 'Текущее значениеEnd TypePublic Enum Operation 'Операция bpNone = 0 'Неизвестный bpFunc = 1 'Функция bpImport = 2 'Импортируемая функция bpComplete = 3 'Присваивание bpStructure = 4 'СтруктураEnd Enum'7 901 9411456Public Type ExtParam bpTypesParams As ParamType 'Типы параметров bpAsFunc As New ParamCodeLine 'Возврат из функции bpTextParam As Variant 'Значение функции bpAsVar As Variant 'Значение переменнойEnd TypePublic Type CodeLine bpOperation As Operation 'Операция bpCommand As Commands 'Команда или ссылка bpParams() As Variant 'Параметры функции bpExtendedParams() As ExtParam 'Расширенные параметры bpReturn As String 'Переменная возврата bpImportName As String 'Имя импортируемой функцииEnd TypePublic Type Comparation bpVariable As String 'Сравниваемая переменная bpValue As String 'С чем сравниваем bpOperator As CompareMethod 'Метод сравнения bpExtValue As ExtParam 'Расширенное сравнениеEnd TypePublic Type IfStruct 'Условная структура bpComparation As Comparation 'Сравнение bpCompareNumber As Integer 'Сколько сравнений bpIsElse As Boolean 'Есть ли обратное условие bpCode() As CodeLine 'Код при истинности условия bpElseCode() As CodeLine 'Код при ложном условииEnd TypePublic Type SwtchStruct 'Структура стрелки bpVariable As Variable 'Переменная bpValues() As String 'Свойства bpCaseNumber() As Integer 'Количество строк кода для вариантов bpCode() As CodeLine 'Код... bpCasesCount As Integer 'Количество вариантовEnd TypePublic Enum ParamType 'Тип параметра bpNone = 0 'Неизвестный bpFuncResult = 1 'Как результат функции bpVar = 2 'Переменная bpValue = 3 'ЗначениеEnd EnumPublic Type LabelEdit 'Метка LabelName As String 'Имя метки LabelLine As Long 'Линия меткиEnd TypePublic Type ForStruct 'Циклическая структура bpTake As CodeLine 'Присваивание bpValues As Comparation 'Сравнение bpCounter As Variable 'Счётчик bpIsIncrement As CodeLine 'Операция bpCode() As CodeLine 'Код циклаEnd TypePublic Type Program 'Транслируемая программа полностью bpProgramVars() As Variable 'Все глобальные переменные bpLabels() As LabelEdit 'Метки bpAllCode() As CodeLine 'Код программы bpAllIfStructs() As IfStruct 'Все условные конструкции bpIfStructsCount As Integer 'Количество условных конструкций bpIfStructsFound As String 'Конфигурация условных конструкций bpAllSwStructs() As SwtchStruct 'Все конструкции стрелки bpSwStructsCount As Integer 'Количество конструкций стрелки bpSwStructsFound As String 'Конфигурация конструкций стрелки bpAllForStructs() As ForStruct 'Количество циклов bpForStructsCount As Integer 'Количество циклических структур bpForStructsFound As String 'Конфигурация циклических конструкцийEnd TypePublic ThisScript As Program 'Этот скрипт

Ответить

Номер ответа: 5
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #5 Добавлено: 30.01.04 10:26

Все просто:

'код формы

Option Explicit

Private Type MyType

Field1 As String

Field2 As String

Field3 As String

End Type

Private Sub Form_Load()

Dim MT As MyType

MT.Field1 = "Это работает"

Call Test(MT)

End Sub

Private Sub Test(ByRef Arg As MyType)

Form1.Caption = Arg.Field1

End Sub

Ответить

Номер ответа: 6
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #6 Добавлено: 30.01.04 12:34

Блин, из-за этого гона долго грузится... :(

Я немного проглядел тему, она называется ByVal. Так вот, насколько я знаю, пользовательский тип ByVal не передается. ByRef - лекго.

Пример поместил выше. Мораль этого примера - использовать Call. Иначе будет

Variable required - can't assign to this expression.

Согласен, это не очевидно, сам когда то парился, но, тем не менее - так работает.

Ответить

Номер ответа: 7
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #7
Добавлено: 31.01.04 01:15

А если объявить ещё одну переменную такого же типа, скопировать в неё значения и передавать ByRef?

Тогда и волки сыты и овцы целы. ;)

Ответить

Номер ответа: 8
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #8 Добавлено: 02.02.04 08:52

CyRax, ты о чём?

Подразумеваешь что-то вроде

Dim MT As MyType

Dim MyT as MyType

MT.Field1 = "Это работает"

MyT=Mt

Call MySub(MyT)

??

Это бред полный. Или ты про CopyMemory?

Я же вроде уже написал рабочий код, чем он не устраивает?

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам