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

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

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

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

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

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

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

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

Ну да. Можешь поискать готовое, авось найдётся (где - не знаю). Или
напиши прогу на С++ или Дельфи, которая выдаст тебе искомое.
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Sizeof Есть ли альтернатива
    #33862990
Фотография Dmitry.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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
Sizeof Есть ли альтернатива
    #33863642
Gen_dos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Большое вам Dmitry. спасибо. Щас попробую
...
Рейтинг: 0 / 0
Sizeof Есть ли альтернатива
    #33865000
Фотография Филипп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это не отсюда ли? :-)
Код: 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
Sizeof Есть ли альтернатива
    #33865021
Фотография Филипп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вот на С++
...
Рейтинг: 0 / 0
Sizeof Есть ли альтернатива
    #33865195
Фотография Dmitry.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ФилиппЭто не отсюда ли? :-)
Точно не отсюда.
сам писал и никуда не подсматривал... :)
а твой скрипт будет работать неправильно...
boolean = 4 bytes
char = 2 bytes (for PB10)
...
Рейтинг: 0 / 0
Sizeof Есть ли альтернатива
    #33865251
Фотография Филипп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это не мой скрипт, а Rui Cruza, и писан он когда ещё даже РВ7 не пахло. Ессно для 10-ки править надо...
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Sizeof Есть ли альтернатива
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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