Страница: 1 |
Нужно срочно передать в функцию в качетсве аргумента объект пользовательского типа. Казалось бы ничего, но ВБ ругается, если я передаю ему объект такого рода. Тип вроде бы совпадает: ExecuteCommand(ThisScript.bpAllIfStructs(StructNum).bpCode(i)) Говорит, что необходима переменная в качестве аргумента. Я попробовал byVal, но он говорит что пользовательские типы нельзя. Object'ы не предлагать! Если предлагать, то объясните, а то я пробовал и с ними всё равно не пашет. Может что не так делаю? Ответы
а как ты объявляешь структуру? Надо примерно так: Private Type MyType a as long b as string end type dim MyType1 as MyType Была у меня такая ерунда! Я выкрутился таким образом: Пользовательские типы запихал в dll-ку,подклучил её к проекту и передавал их как угодно. Хоть ByVal, хоть ByRef. Другими прийдется тебе создавать библиотеку типов. Все просто: 'код формы 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 Блин, из-за этого гона долго грузится... Я немного проглядел тему, она называется ByVal. Так вот, насколько я знаю, пользовательский тип ByVal не передается. ByRef - лекго. Пример поместил выше. Мораль этого примера - использовать Call. Иначе будет Variable required - can't assign to this expression. Согласен, это не очевидно, сам когда то парился, но, тем не менее - так работает. А если объявить ещё одну переменную такого же типа, скопировать в неё значения и передавать ByRef? Тогда и волки сыты и овцы целы. CyRax, ты о чём? Подразумеваешь что-то вроде Dim MT As MyType Dim MyT as MyType MT.Field1 = "Это работает" MyT=Mt Call MySub(MyT) ?? Это бред полный. Или ты про CopyMemory? Я же вроде уже написал рабочий код, чем он не устраивает? Страница: 1 |
Вопрос: ByVal ПОЛЬЗОВАТЕЛЬСКИЙ ТИП. СРОЧНО!!!!!!
Добавлено: 29.01.04 22:04
Автор вопроса: Диман | Web-сайт:
Ответы
Всего ответов: 8
Номер ответа: 1
Автор ответа:
NeForm@t
ICQ: 252999255
Вопросов: 36
Ответов: 247
Web-сайт:
Профиль | | #1
Добавлено: 29.01.04 22:27
Номер ответа: 2
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #2
Добавлено: 29.01.04 23:00
Номер ответа: 3
Автор ответа:
Диман
ICQ: 224590251
Вопросов: 29
Ответов: 64
Web-сайт:
Профиль | | #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-сайт:
Профиль | | #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
Номер ответа: 6
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #6
Добавлено: 30.01.04 12:34
Номер ответа: 7
Автор ответа:
CyRax
Разработчик Offline Client
ICQ: 204447456
Вопросов: 180
Ответов: 4229
Web-сайт:
Профиль | | #7
Добавлено: 31.01.04 01:15
Номер ответа: 8
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #8
Добавлено: 02.02.04 08:52