Visual Basic, .NET, ASP, VBScript
 

   
   
     

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

Страница: 1 |

 

  Вопрос: Глюк в VB6 Добавлено: 02.07.04 18:41  

Автор вопроса:  @CyRax PTR | Web-сайт: basicproduction.nm.ru/ | ICQ: 204447456 
 Скомпилировал программу. При запуске, когда доходит до одной функции типа Byte выдаёт ошибку 6 (Overflow). Проверял возвращаемое значение - все в диапазоне байта. Делал функции тип Integer и Variant - всё равно ошибка 6.

 Работает в: IDE, P-Code, Native Code без оптимизации.
 Глючит в: Native Code с оптимизацией для маленького или быстрого кода.

 Может его побороть как то можно? А?

Ответить

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

Номер ответа: 1
Автор ответа:
 dNW



Вопросов: 30
Ответов: 683
 Профиль | | #1 Добавлено: 02.07.04 19:01
У меня тоже такое было, но я так и не поня почему. Я начал перепроверять весь подозрительный код, поменял кое-что и все поехало

Ответить

Номер ответа: 2
Автор ответа:
 @CyRax PTR



ICQ: 204447456 

Вопросов: 28
Ответов: 664
 Web-сайт: basicproduction.nm.ru/
 Профиль | | #2
Добавлено: 02.07.04 19:10
 Остаётся только найти это "кое-что".
 Там и кода практически нет. Десяток констант, пару сложений и десяток CHR$(Константа).
 Вот и всё собственно. Здаётся мне что сам VB неправильный оптимизированный код генерирует.

Ответить

Номер ответа: 3
Автор ответа:
 sne



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

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #3
Добавлено: 02.07.04 20:03
может стоит тип явно указать для всех переменных...

дай код... может я голову поломаю...

Ответить

Номер ответа: 4
Автор ответа:
 @CyRax PTR



ICQ: 204447456 

Вопросов: 28
Ответов: 664
 Web-сайт: basicproduction.nm.ru/
 Профиль | | #4
Добавлено: 02.07.04 20:30
>может стоит тип явно указать для всех переменных...
 - Option Explicit

>дай код... может я голову поломаю...
 - На.
Function Mnemonic_Common_OpCodes(ByVal Mnemonic As String, ByVal Op1_Type As String, ByVal Op2_Type As String, ByRef StrRet As String) As Byte
 'ADD,OR,ADC,SBB,AND,SUB,XOR,CMP
 
 ;Dim OperatorOffset As Byte
 OperatorOffset = Mnemonic_Common_OperatorStep(Mnemonic)
 
 ;Dim Ext16 As String
  Ext16 = Chr$(&H66)
 
 Const R_Offset As Byte = &HC0
 
 Const m8r8 As Byte = &H0 '&H0
 'Const r8r8 As Byte = m8r8 '&HC0
 Const r8m8 As Byte = &H2 '&H0
 Const r8r8 As Byte = r8m8 '&HC0
 
 Const m32r32 As Byte = &H1 '&H0
 Const r32m32 As Byte = &H3 '&H0
 'Const r32r32 As Byte = m32r32 '&HC0
 Const r32r32 As Byte = r32m32 '&HC0
 
 Const m8imm8 As Byte = &H80 '&H0
 Const r8imm8 As Byte = m8imm8 '&HC0
 
 Const m32imm32 As Byte = &H81 '&H0
 Const r32imm32 As Byte = m32imm32 '&HC0
 
 Const S_m32imm8 As Byte = &H83 '&H0 /sign-extended
 Const S_r32imm8 As Byte = S_m32imm8 '&HC0 /sign-extended

 Const ALimm8 As Byte = &H4
 Const EAXimm32 As Byte = &H5

 Select Case Op1_Type & Op2_Type
 Case "m8r8"
  StrRet = Chr$(m8r8 + OperatorOffset)
 Case "r8r8"
  StrRet = Chr$(r8r8 + OperatorOffset)
  Mnemonic_Common_OpCodes = R_Offset
 Case "m16r16"
  StrRet = Ext16 & Chr$(m32r32 + OperatorOffset)
 Case "r16r16"
  StrRet = Ext16 & Chr$(r32r32 + OperatorOffset)
  Mnemonic_Common_OpCodes = R_Offset
 Case "m32r32"
  StrRet = Chr$(m32r32 + OperatorOffset)
 Case "r32r32"
  StrRet = Chr$(r32r32 + OperatorOffset)
  Mnemonic_Common_OpCodes = R_Offset
 Case "r8m8"
  StrRet = Chr$(r8m8 + OperatorOffset)
  Case "r16m16"
  StrRet = Ext16 & Chr$(r32m32 + OperatorOffset)
  Case "r32m32"
  StrRet = Chr$(r32m32 + OperatorOffset)
 Case "m8imm8"
  StrRet = Chr$(m8imm8)
  Mnemonic_Common_OpCodes = OperatorOffset
 Case "r8imm8"
  StrRet = Chr$(r8imm8)
  Mnemonic_Common_OpCodes = R_Offset + OperatorOffset
 Case "m16imm16"
  StrRet = Ext16 & Chr$(m32imm32)
  Mnemonic_Common_OpCodes = OperatorOffset
 Case "m32imm32"
  StrRet = Chr$(m32imm32)
  Mnemonic_Common_OpCodes = OperatorOffset
 Case "r16imm16"
  StrRet = Ext16 & Chr$(r32imm32)
  Mnemonic_Common_OpCodes = R_Offset + OperatorOffset
 Case "r32imm32"
  StrRet = Chr$(r32imm32)
  Mnemonic_Common_OpCodes = R_Offset + OperatorOffset
 Case "ALimm8"
  'StrRet = Chr$(ALimm8 + OperatorOffset)
  Mnemonic_Common_OpCodes = ALimm8 + OperatorOffset
 Case "AXimm16", "AXimm8"
  'StrRet = Ext16 & Chr$(EAXimm32 + OperatorOffset)
  StrRet = Ext16
  Mnemonic_Common_OpCodes = EAXimm32 + OperatorOffset
 Case "EAXimm32", "EAXimm16", "EAXimm8"
  'StrRet = Chr$(EAXimm32 + OperatorOffset)
  Mnemonic_Common_OpCodes = EAXimm32 + OperatorOffset
 Case Else
  MsgBox "Invalid operand(s)" & vbCr & Mnemonic & " " & Op1_Type & "," & Op2_Type
 End Select
End Function

=======

 Можеть тебе лучше весь VBASM выслать? Всё равно он Open-Source.

Ответить

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



Вопросов: 30
Ответов: 683
 Профиль | | #5 Добавлено: 02.07.04 21:28
> Там и кода практически нет
мда уж. Действительно почти нет... :)

Ответить

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



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

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #6
Добавлено: 02.07.04 22:19
>>может стоит тип явно указать для всех переменных...
> - Option Explicit

Я имел в виду:
Long&
Integer%
Single!
Currency@
String$


сейчас на ошибку полюбуюсь...

Ответить

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



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

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #7
Добавлено: 02.07.04 22:45
ты бы хоть дал еще и Mnemonic_Common_OperatorStep
а так же объяснил че в параметры передавать...

голый код это конечно хорошо, тут еще даже и без комментариев, это совсем замечательно %)

я не телепат :)))

Ответить

Номер ответа: 8
Автор ответа:
 @CyRax PTR



ICQ: 204447456 

Вопросов: 28
Ответов: 664
 Web-сайт: basicproduction.nm.ru/
 Профиль | | #8
Добавлено: 02.07.04 23:21
 Держи, не телепат

Function Mnemonic_Common_OperatorStep(ByVal Operator As String) As Byte
 '255 - Error
 Mnemonic_Common_OperatorStep = 255
 Operator = UCase$(Trim$(Operator))
 
 Select Case Operator
 Case "ADD"
  Mnemonic_Common_OperatorStep = &H0
 Case "OR"
  Mnemonic_Common_OperatorStep = &H8
 Case "ADC"
  Mnemonic_Common_OperatorStep = &H10
 Case "SBB"
  Mnemonic_Common_OperatorStep = &H18
 Case "AND"
  Mnemonic_Common_OperatorStep = &H20
 Case "SUB"
  Mnemonic_Common_OperatorStep = &H28
 Case "XOR"
  Mnemonic_Common_OperatorStep = &H30
 Case "CMP"
  Mnemonic_Common_OperatorStep = &H38
 End Select
End Function

===
'Этот код вызывает Mnemonic_Common_OpCodes

 ;Dim Const_Opcodes As String, Variable_Opcodes As Byte
 
 ' Warning !!!
 'Function Mnemonic_Common_OpCodes returns Error 6 (Overflow) when:
 ' "Compile to Native Code" with "Optimize for Fast Code" or "Optimize for Small Code"
 'For compile to 'Native Code' use "No Optimization" option.
 
 'Ошибка возникает здесь ->
 Variable_Opcodes = Mnemonic_Common_OpCodes(Mnemonic, Op1_Type, Op2_Type, Const_Opcodes)

===
 Перед вызовом сделай
 Op1_Type="r32":Op2_Type="imm32"
 Mnemonic=Одна из списка выше

 Знать что это не обязательно. Тем более что ты не телепат :)

Ответить

Страница: 1 |

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



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