WHAT() WHO() и dll
Добавлено: 07 Июнь 2016, 12:00
Добрый день!
Есть процедура которая пробегается по record и вытаскивает значения полей (ну и само наименование поля).
файлик TPS
Если процедуру выношу в DLL и вызываю в проге написанной на delphi
procedure export(),PASCAL
CurrentField ANY
FIELD_NUMBER LONG
code
FIELD_NUMBER = 1
Loop while Clip(Left(WHO(Sp:Record, FIELD_NUMBER))) <> ''
If Spools{PROP:TYPE, FIELD_NUMBER} <> 'GROUP' Then
If Spools{PROP:Dim, FIELD_NUMBER} = 0 Then
! Вот тут уходит в ошибку floating point invalid operation причем только на определенном поле (Тип : Real, значение : 0)
! Причем другие поля с таким же типом отрабатывают нормально
! Поля находятся в группе
! МБ перед CurrentField &= WHAT(Sp:Record, FIELD_NUMBER) необходимо сначало CurrentField обнулить?
CurrentField &= WHAT(Sp:Record, FIELD_NUMBER)
!---------------------------------------------------------------------------------
TABLE_FIELD_INFO_Class.Export_Data(Clip(Left(WHO(Sp:Record, FIELD_NUMBER))), 0, SPOOLS{PROP:TYPE, FIELD_NUMBER}, CurrentField)
Else
Loop Loc:XX = 1 To Spools{PROP:Dim, FIELD_NUMBER}
CurrentField &= WHAT(Sp:Record, FIELD_NUMBER, Loc:XX)
TABLE_FIELD_INFO_Class.Export_Data(Clip(Left(WHO(Sp:Record, FIELD_NUMBER))), 0, SPOOLS{PROP:TYPE, FIELD_NUMBER}, CurrentField)
.
.
.
FIELD_NUMBER += 1
.
Если эту процедуры переношу в exe на кларе (procedure export() )
procedure export()
CurrentField ANY
FIELD_NUMBER LONG
code
FIELD_NUMBER = 1
Loop while Clip(Left(WHO(Sp:Record, FIELD_NUMBER))) <> ''
If Spools{PROP:TYPE, FIELD_NUMBER} <> 'GROUP' Then
If Spools{PROP:Dim, FIELD_NUMBER} = 0 Then
! ОШИБКИ НЕТУ
CurrentField &= WHAT(Sp:Record, FIELD_NUMBER)
!---------------------------------------------------------------------------------
TABLE_FIELD_INFO_Class.Export_Data(Clip(Left(WHO(Sp:Record, FIELD_NUMBER))), 0, SPOOLS{PROP:TYPE, FIELD_NUMBER}, CurrentField)
Else
Loop Loc:XX = 1 To Spools{PROP:Dim, FIELD_NUMBER}
CurrentField &= WHAT(Sp:Record, FIELD_NUMBER, Loc:XX)
TABLE_FIELD_INFO_Class.Export_Data(Clip(Left(WHO(Sp:Record, FIELD_NUMBER))), 0, SPOOLS{PROP:TYPE, FIELD_NUMBER}, CurrentField)
.
.
.
FIELD_NUMBER += 1
.
Есть процедура которая пробегается по record и вытаскивает значения полей (ну и само наименование поля).
файлик TPS
Если процедуру выношу в DLL и вызываю в проге написанной на delphi
procedure export(),PASCAL
CurrentField ANY
FIELD_NUMBER LONG
code
FIELD_NUMBER = 1
Loop while Clip(Left(WHO(Sp:Record, FIELD_NUMBER))) <> ''
If Spools{PROP:TYPE, FIELD_NUMBER} <> 'GROUP' Then
If Spools{PROP:Dim, FIELD_NUMBER} = 0 Then
! Вот тут уходит в ошибку floating point invalid operation причем только на определенном поле (Тип : Real, значение : 0)
! Причем другие поля с таким же типом отрабатывают нормально
! Поля находятся в группе
! МБ перед CurrentField &= WHAT(Sp:Record, FIELD_NUMBER) необходимо сначало CurrentField обнулить?
CurrentField &= WHAT(Sp:Record, FIELD_NUMBER)
!---------------------------------------------------------------------------------
TABLE_FIELD_INFO_Class.Export_Data(Clip(Left(WHO(Sp:Record, FIELD_NUMBER))), 0, SPOOLS{PROP:TYPE, FIELD_NUMBER}, CurrentField)
Else
Loop Loc:XX = 1 To Spools{PROP:Dim, FIELD_NUMBER}
CurrentField &= WHAT(Sp:Record, FIELD_NUMBER, Loc:XX)
TABLE_FIELD_INFO_Class.Export_Data(Clip(Left(WHO(Sp:Record, FIELD_NUMBER))), 0, SPOOLS{PROP:TYPE, FIELD_NUMBER}, CurrentField)
.
.
.
FIELD_NUMBER += 1
.
Если эту процедуры переношу в exe на кларе (procedure export() )
procedure export()
CurrentField ANY
FIELD_NUMBER LONG
code
FIELD_NUMBER = 1
Loop while Clip(Left(WHO(Sp:Record, FIELD_NUMBER))) <> ''
If Spools{PROP:TYPE, FIELD_NUMBER} <> 'GROUP' Then
If Spools{PROP:Dim, FIELD_NUMBER} = 0 Then
! ОШИБКИ НЕТУ
CurrentField &= WHAT(Sp:Record, FIELD_NUMBER)
!---------------------------------------------------------------------------------
TABLE_FIELD_INFO_Class.Export_Data(Clip(Left(WHO(Sp:Record, FIELD_NUMBER))), 0, SPOOLS{PROP:TYPE, FIELD_NUMBER}, CurrentField)
Else
Loop Loc:XX = 1 To Spools{PROP:Dim, FIELD_NUMBER}
CurrentField &= WHAT(Sp:Record, FIELD_NUMBER, Loc:XX)
TABLE_FIELD_INFO_Class.Export_Data(Clip(Left(WHO(Sp:Record, FIELD_NUMBER))), 0, SPOOLS{PROP:TYPE, FIELD_NUMBER}, CurrentField)
.
.
.
FIELD_NUMBER += 1
.