Страница 1 из 1
					
				Как составить описание функции SetFilePointerEx
				Добавлено: 17 Июль 2019, 12:06
				 Алексей- Софт-Центр
				Добрый день!
   Как описать api функцию:
BOOL SetFilePointerEx(
  HANDLE         hFile,
  LARGE_INTEGER  liDistanceToMove,
  PLARGE_INTEGER lpNewFilePointer,
  DWORD          dwMoveMethod
);
    SetFilePointerEx(UNSIGNED,?,?,ULONG),BOOL,PASCAL,RAW,NAME('SetFilePointerEx')
А вот как определить LARGE_INTEGER  и  PLARGE_INTEGER ?
Алексей
			 
			
					
				Как составить описание функции SetFilePointerEx
				Добавлено: 17 Июль 2019, 12:19
				 Дед Пахом
				Как-то так, параметр liDistanceToMove передаём двумя LONG, параметр lpNewFilePointer это адрес:
Код: Выделить всё
SetFilePointerEx(UNSIGNED,LONG lowLongDistanceToMove,LONG hiLongDistanceToMove,LONG pNewFilePointer,ULONG),BOOL,PASCAL,RAW,NAME('SetFilePointerEx')
 
			 
			
					
				Как составить описание функции SetFilePointerEx
				Добавлено: 17 Июль 2019, 12:35
				 Constantine
				
У меня прокатывал такой вариант:
Код: Выделить всё
liDistanceToMove REAL
STR STRING(8),OVER(liDistanceToMove)
 А в STR пишем побайтно... Паскалевское соглашение о связях такие пассажи пропускает... 

 
			 
			
					
				Как составить описание функции SetFilePointerEx
				Добавлено: 17 Июль 2019, 12:45
				 Алексей- Софт-Центр
				Спасибо, сейчас попробую!
Алексей
			 
			
					
				Как составить описание функции SetFilePointerEx
				Добавлено: 17 Июль 2019, 15:18
				 kreator
				В equates.clw есть группа int64. Скорее всего, то, что надо.
			 
			
					
				Как составить описание функции SetFilePointerEx
				Добавлено: 17 Июль 2019, 17:44
				 vic7tar
				Дед Пахом писал(а): 17 Июль 2019, 12:19Как-то так, параметр liDistanceToMove передаём двумя LONG, параметр lpNewFilePointer это адрес:
Код: Выделить всё
SetFilePointerEx(UNSIGNED,LONG lowLongDistanceToMove,LONG hiLongDistanceToMove,LONG pNewFilePointer,ULONG),BOOL,PASCAL,RAW,NAME('SetFilePointerEx')
 
... , ulong lowLongDistanceToMove, ... - наверно так нужно писать?
 
			 
			
					
				Как составить описание функции SetFilePointerEx
				Добавлено: 17 Июль 2019, 17:48
				 Дед Пахом
				vic7tar писал(а): 17 Июль 2019, 17:44... , ulong lowLongDistanceToMove, ... - наверно так нужно писать?
 
не принципиально, но по смыслу да, ulong логичнее.
 
			 
			
					
				Как составить описание функции SetFilePointerEx
				Добавлено: 17 Июль 2019, 18:02
				 vic7tar
				Нет, тут не должно быть логики, вот определение:
Код: Выделить всё
...
typedef union _LARGE_INTEGER {
    struct {
        DWORD LowPart;  <-----------------------------------------------------
        LONG HighPart;
    } DUMMYSTRUCTNAME;
    struct {
        DWORD LowPart;
        LONG HighPart;
    } u;
#endif //MIDL_PASS
    LONGLONG QuadPart;
} LARGE_INTEGER;
Вопрос к стартеру - если не секрет, для чего нужна эта функция?
 
			 
			
					
				Как составить описание функции SetFilePointerEx
				Добавлено: 17 Июль 2019, 18:16
				 Дед Пахом
				vic7tar писал(а): 17 Июль 2019, 18:02Нет, тут не должно быть логики
 
Неожиданно.
 
			 
			
					
				Как составить описание функции SetFilePointerEx
				Добавлено: 17 Июль 2019, 18:22
				 vic7tar
				Если в таком же стиле:
Дед Пахом писал(а): 16 Июль 2019, 16:31спасибо, не надо.
 
то ну ладно уж.
 
			 
			
					
				Как составить описание функции SetFilePointerEx
				Добавлено: 18 Июль 2019, 11:52
				 Алексей- Софт-Центр
				Добрый день!
vic7tar писал(а): 17 Июль 2019, 18:02
Вопрос к стартеру - если не секрет, для чего нужна эта функция?
 
 Работаю с файлами больших размеров, 500 Гб , например.
kreator писал(а): 17 Июль 2019, 15:18В equates.clw есть группа int64. Скорее всего, то, что надо.
 
 Да, нашел  i64.INC файл. Там "математика" с 64-битными целыми.,там же и описание:
! INT64    GROUP,TYPE
! lo         ULONG
! hi         LONG
!          END
!
! UINT64   GROUP,TYPE
! lo         ULONG
! hi         ULONG
!          END
   С API - вроде разобрался. (Вариант Деда Пахома - спасибо)
  теперь "плаваю" с присвоением int64 в decimal.
Есть процедура (в i64)
!!! <summary>
!!! Store 64-bit integer value to DECIMAL variable.
!!! </summary>
!!! <param name="dest">DECIMAL variable.</param>
!!! <param name="src">64-bit integer value to store to DECIMAL variable.</param>
i64ToDecimal   PROCEDURE (*DECIMAL dest, *INT64  src),RAW,NAME('Cla$i64ToDecS')
i64ToDecimal   PROCEDURE (*DECIMAL dest, *UINT64 src),RAW,NAME('Cla$i64ToDecU')
      Объявил 
dec1   decimal(20)
  А вот второй параметр - никак не принимает, что я туда только не прописывал ((((
  Компиляция с ошибкой : No matching prototype available 
Алексей
 
			 
			
					
				Как составить описание функции SetFilePointerEx
				Добавлено: 18 Июль 2019, 12:07
				 Дед Пахом
				Код: Выделить всё
  PROGRAM
  MAP
    INCLUDE('i64.inc')
  END
i64val                        LIKE(INT64)
decval                        DECIMAL(20)
  CODE
  i64val.lo = 1000
  i64val.hi = 777
  i64ToDecimal(decval, i64val)
  MESSAGE('Decimal='& decval)
  
  CLEAR(i64val)
  i64FromDecimal(i64val, decval)
  MESSAGE('i64.lo='& i64val.lo &', i64.hi='& i64val.hi)
 
			 
			
					
				Как составить описание функции SetFilePointerEx
				Добавлено: 18 Июль 2019, 12:21
				 Алексей- Софт-Центр
				Добрый день!
  И снова, Дед Пахом, спасибо большое !
Про Like - и не думал в эту сторону()
Алексей
			 
			
					
				Как составить описание функции SetFilePointerEx
				Добавлено: 18 Июль 2019, 13:56
				 kreator
				
Где-то раньше на форуме обсуждали эти переменные. Можно ещё вот так:
А совсем без like будет доступно, вероятно, после внедрения полноценной поддержки 64 бита.
 
			 
			
					
				Как составить описание функции SetFilePointerEx
				Добавлено: 18 Июль 2019, 14:05
				 Алексей- Софт-Центр
				Добрый день!
   
kreator писал(а): 18 Июль 2019, 13:56
Где-то раньше на форуме обсуждали эти переменные. Можно ещё вот так:
А совсем без like будет доступно, вероятно, после внедрения полноценной поддержки 64 бита.
 
   Да, так тоже работает. Спасибо)
Алексей