Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Sizeof Есть ли альтернатива / 12 сообщений из 12, страница 1 из 1
18.07.2006, 16:43
    #33861579
Gen_dos
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sizeof Есть ли альтернатива
Уважаемые программисты подскажите есть ли альтернатива функции sizeof в PowerBuilder 9.0. Для определения длины в байтах созданной структуры или массива.
Спасибо
...
Рейтинг: 0 / 0
18.07.2006, 16:44
    #33861584
Dim2000
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sizeof Есть ли альтернатива
Gen_dos wrote:

> Уважаемые программисты подскажите есть ли альтернатива функции sizeof в
> PowerBuilder 9.0. Для определения длины в байтах созданной структуры или
> массива.

Нет.
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
18.07.2006, 16:56
    #33861643
Gen_dos
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sizeof Есть ли альтернатива
Скажите а как тогда мне корректо воспользоваться Api функциями которые используют это значение.
...
Рейтинг: 0 / 0
18.07.2006, 17:17
    #33861722
Dim2000
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sizeof Есть ли альтернатива
Gen_dos wrote:

> Скажите а как тогда мне корректо воспользоваться Api функциями которые
> используют это значение.

Посчитать вручную.
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
18.07.2006, 17:21
    #33861731
Gen_dos
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sizeof Есть ли альтернатива
А так надеялся на чудо. Но все равно спасибо.
То есь я сумирую длину всех типов данных для используемых в структуре переменных ?
...
Рейтинг: 0 / 0
18.07.2006, 17:30
    #33861765
Dim2000
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sizeof Есть ли альтернатива
Gen_dos wrote:

> А так надеялся на чудо. Но все равно спасибо.

Оставь надежду всяк сюда входящий .

> То есь я сумирую длину всех типов данных для используемых в структуре
> переменных ?

Ну да. Можешь поискать готовое, авось найдётся (где - не знаю). Или
напиши прогу на С++ или Дельфи, которая выдаст тебе искомое.
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
19.07.2006, 10:37
    #33862990
Dmitry.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sizeof Есть ли альтернатива
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
global type f_sizeof from function_object
end type

forward prototypes
global function long f_sizeof (readonly typedefinition typedef)
end prototypes

global function long f_sizeof (readonly typedefinition typedef);/*
//returns the sizeof for a structure in bytes (not for the object)
//returns -1 on error
//Usage for structure:
//  long i
//  my_type my_variable
//  i=f_sizeof(my_variable.classdefinition)
//Usage for simpletype:
//  long i
//  i=f_sizeof(FindTypeDefinition ( 'double' ))
//created by Dmitry Lukyanov
*/

long i,k,count,ret,typelen
blob{ 100 } b // 100  because i assume that simple datatype will not be larger then  100  bytes in the nearest future
long pointer= 4  //the size of the pointer in  32  bit system
boolean          v_boolean
char             v_char
date             v_date
datetime         v_datetime
dec              v_dec
double           v_double
int              v_int
long             v_long
real             v_real
string           v_string
time             v_time
uint             v_uint
ulong            v_ulong
classdefinition classdef
variablecardinalitydefinition cardinality

if isValid(typedef) then
else
	 return - 1 
end if

choose case typedef.Category
	case ClassOrStructureType!
		if typedef.IsStructure then
			//get the size of the structure
			classdef=typedef
			count=upperbound(classdef.VariableList)
			for i= 1  to count
				if classdef.VariableList[i].name<>'classdefinition' or classdef.VariableList[i].IsUserDefined then 
					cardinality=classdef.VariableList[i].cardinality
					if cardinality.cardinality=unboundedarray! then
						typelen=pointer
					else
						typelen=f_sizeof(classdef.VariableList[i].TypeInfo)
						if cardinality.cardinality=boundedarray! then
							for k= 1  to upperbound(cardinality.arraydefinition)
								typelen *= cardinality.arraydefinition[k].upperbound - cardinality.arraydefinition[k].lowerbound + 1 
							next
						end if
					end if
					if typelen< 0  then return typelen
					ret+=typelen
				end if
			next
			return ret
		end if
	case SimpleType!
		//get the size of the simple type
		choose case typedef.DataTypeOf
			case 'blob'
				return pointer
			case 'boolean'
				return BlobEdit ( b,  1 , true )- 1  //write the simple type into blob variable to determine length
			case 'char','character'
				return BlobEdit ( b,  1 , v_char )- 1 
			case 'date'
				return BlobEdit ( b,  1 , v_date )- 1 
			case 'datetime'
				return BlobEdit ( b,  1 , v_datetime )- 1 
			case 'dec','decimal'
				return BlobEdit ( b,  1 , v_dec )- 1 
			case 'double'
				return BlobEdit ( b,  1 , v_double )- 1 
			case 'int','integer'
				return BlobEdit ( b,  1 , v_int )- 1 
			case 'long'
				return BlobEdit ( b,  1 , v_long )- 1 
			case 'real'
				return BlobEdit ( b,  1 , v_real )- 1 
			case 'string'
				return pointer
			case 'time'
				return BlobEdit ( b,  1 , v_time )- 1 
			case 'uint','unsignedint','unsignedinteger'
				return BlobEdit ( b,  1 , v_uint )- 1 
			case 'ulong','unsignedlong'
				return BlobEdit ( b,  1 , v_ulong )- 1 
			case 'any'
				//could be anything so can't determine the length. or maybe pointer?
		end choose
end choose

return - 1 

end function
...
Рейтинг: 0 / 0
19.07.2006, 13:10
    #33863642
Gen_dos
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sizeof Есть ли альтернатива
Большое вам Dmitry. спасибо. Щас попробую
...
Рейтинг: 0 / 0
19.07.2006, 18:00
    #33865000
Филипп
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sizeof Есть ли альтернатива
Это не отсюда ли? :-)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
$PBExportHeader$nvo_sizeof.sru
$PBExportComments$Non visual user object that implements the SizeOf function present on other languages (C, Delphi, VB)
forward
global type nvo_sizeof from nonvisualobject
end type
end forward

global type nvo_sizeof from nonvisualobject autoinstantiate
end type

type variables
Private:
CONSTANT integer SIZE_BOOLEAN	=  1 	// Boolean
CONSTANT integer SIZE_CHAR	=  1 	// Char
CONSTANT integer SIZE_INT	=  2 	// Signed integer
CONSTANT integer SIZE_UINT	=  2 	// Unsigned integer
CONSTANT integer SIZE_LONG 	=  4 	// Signed Long
CONSTANT integer SIZE_ULONG 	=  4 	// Unsigned Long
CONSTANT integer SIZE_STRING 	=  4 	// Assume as string pointer

// Supported DataTypes
integer 	INTEGER
uint 	UINT
long 	LONG
ulong 	ULONG
char 	CHAR
string 	STRING
boolean 	BOOLEAN

end variables

forward prototypes
public function long sizeof (long data)
public function long sizeof (ulong data)
public function long sizeof (integer data)
public function long sizeof (uint data)
public function long sizeof (character data)
public function long sizeof (string data)
public function long sizeof (any data[])
public function long sizeof (boolean data)
public function long sizeof (powerobject data)
private function long sizeof (variabledefinition vardef[])
end prototypes

public function long sizeof (long data);Return(SIZE_LONG)
end function

public function long sizeof (ulong data);Return(SIZE_ULONG)
end function

public function long sizeof (integer data);Return(SIZE_INT)
end function

public function long sizeof (uint data);Return(SIZE_UINT)
end function

public function long sizeof (character data);Return(SIZE_CHAR)
end function

public function long sizeof (string data);Return(SIZE_STRING)
end function

public function long sizeof (any data[]);// Gives the dimension of an array
//
// Arguments: Data[]	=> Array to know the dimension
//
// Returns: Size of the array
//
// Notes: 
//		 1 ) Supports mixed type arrays (and variable sized strings within the array)
//		 2 ) DOESN'T support multi-dimension arrays;
long ll_Index, ll_Count, ll_Size =  0 

ll_Count = UpperBound(Data)

For ll_Index =  1  To ll_Count

	Choose Case ClassName(Data[ll_Index])
		Case "long"
			ll_Size += SizeOf(LONG)
		Case "unsignedlong","ulong"
			ll_Size += SizeOf(ULONG)
		Case "int","integer"
			ll_Size += SizeOf(INTEGER) 
		Case "uint","unsignedinteger","unsignedint"
			ll_Size += SizeOf(UINT)
		Case "char", "character"
			ll_Size += SizeOf(CHAR)
		Case "string"
			ll_Size += SizeOf(CHAR) * SizeOf(String(Data[ll_Index]))
		Case "boolean"
			ll_Size += SizeOf(BOOLEAN) 
	End Choose

Next

Return(ll_Size)
end function

public function long sizeof (boolean data);Return(SIZE_BOOLEAN)
end function

public function long sizeof (powerobject data);// This function calculates the size of a structure
//
// The structure can contain simple datatypes (long, integer, boolean), arrays or
// other structures within it
//
// Arguments: Data	=> Structure to know the size of..
//
// Returns: Size of the structure or - 1  if error
//
// Notes: 
//
//	 1 ) Cannot calculate the size of a structure with strings (variable size), for fixed
//  sized strings use a char array;
//  2 ) CAN calculate the size of multi-dimension arrays within the structures
ClassDefinition ClassDef
VariableDefinition VarDef[]

ClassDef = Data.ClassDefinition
VarDef	= ClassDef.VariableList

Return(SizeOf(VarDef))

end function

private function long sizeof (variabledefinition vardef[]);// Internal calculations for structure sizes
long ll_Index, ll_Count, ll_Size, ll_Array =  0 
ClassDefinition TypeInfo
VariableDefinition VarList[]
VariableCardinalityDefinition VarCarDef
ArrayBounds ArrBounds[]

ll_Count = Upperbound(VarDef)

For ll_Index =  2  To ll_Count
	
	VarCarDef = VarDef[ll_Index].Cardinality
	ArrBounds = VarCarDef.ArrayDefinition
	
	If Upperbound(ArrBounds) >  0  Then 
		ll_Array = ArrBounds[ 1 ].UpperBound 
	Else 
		ll_Array =  1 
	End If

	Choose Case VarDef[ll_Index].TypeInfo.DataTypeOf
		Case "long"
			ll_Size += SizeOf(LONG) * ll_Array
		Case "ulong","unsignedlong"
			ll_Size += SizeOf(ULONG) * ll_Array
		Case "int","integer"
			ll_Size += SizeOf(INTEGER) * ll_Array
		Case "uint","unsignedint","unsignedinteger"
			ll_Size += SizeOf(UINT) * ll_Array
		Case "char","character"
			ll_Size += SizeOf(CHAR)  * ll_Array
		Case "string"
			ll_Size += SizeOf(STRING) * ll_Array
		Case "structure"
			TypeInfo = VarDef[ll_Index].TypeInfo
			VarList = TypeInfo.VariableList
			ll_Size += SizeOf(VarList)
		Case Else
			MessageBox("SizeOf error","Type is not supported, possibly variable sized or object type!",StopSign!,Ok!)
			Return(- 1 )
	End Choose
	
Next

Return(ll_Size)
end function

on nvo_sizeof.create
TriggerEvent( this, "constructor" )
end on

on nvo_sizeof.destroy
TriggerEvent( this, "destructor" )
end on
...
Рейтинг: 0 / 0
19.07.2006, 18:05
    #33865021
Филипп
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sizeof Есть ли альтернатива
А вот на С++
...
Рейтинг: 0 / 0
19.07.2006, 19:08
    #33865195
Dmitry.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sizeof Есть ли альтернатива
ФилиппЭто не отсюда ли? :-)
Точно не отсюда.
сам писал и никуда не подсматривал... :)
а твой скрипт будет работать неправильно...
boolean = 4 bytes
char = 2 bytes (for PB10)
...
Рейтинг: 0 / 0
19.07.2006, 19:42
    #33865251
Филипп
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sizeof Есть ли альтернатива
Это не мой скрипт, а Rui Cruza, и писан он когда ещё даже РВ7 не пахло. Ессно для 10-ки править надо...
...
Рейтинг: 0 / 0
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Sizeof Есть ли альтернатива / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]