Как составить описание функции SetFilePointerEx
Модератор: Дед Пахом
					Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
	При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
- 
				Алексей- Софт-Центр
 - Ветеран
 - Сообщения: 392
 - Зарегистрирован: 26 Август 2009, 12:41
 - Откуда: Moscow
 - Контактная информация:
 
Как составить описание функции SetFilePointerEx
Добрый день!
Как описать 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 ?
Алексей
			
			
									
						Как описать 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 ?
Алексей
- Дед Пахом
 - Старичок
 - Сообщения: 3346
 - Зарегистрирован: 07 Июль 2005, 16:51
 - Откуда: Москва, Россия
 - Благодарил (а): 20 раз
 - Поблагодарили: 56 раз
 - Контактная информация:
 
Как составить описание функции SetFilePointerEx
Как-то так, параметр liDistanceToMove передаём двумя LONG, параметр lpNewFilePointer это адрес:
			
			
									
						Код: Выделить всё
SetFilePointerEx(UNSIGNED,LONG lowLongDistanceToMove,LONG hiLongDistanceToMove,LONG pNewFilePointer,ULONG),BOOL,PASCAL,RAW,NAME('SetFilePointerEx')С уважением, ДП
			
						- 
				Constantine
 - Активист
 - Сообщения: 185
 - Зарегистрирован: 07 Февраль 2017, 16:58
 
Как составить описание функции SetFilePointerEx
У меня прокатывал такой вариант:
Код: Выделить всё
liDistanceToMove REAL
STR STRING(8),OVER(liDistanceToMove)- 
				Алексей- Софт-Центр
 - Ветеран
 - Сообщения: 392
 - Зарегистрирован: 26 Август 2009, 12:41
 - Откуда: Moscow
 - Контактная информация:
 
- 
				kreator
 - ✯ Ветеран ✯
 - Сообщения: 5235
 - Зарегистрирован: 28 Май 2009, 15:54
 - Откуда: Москва
 - Благодарил (а): 11 раз
 - Поблагодарили: 26 раз
 
Как составить описание функции SetFilePointerEx
В equates.clw есть группа int64. Скорее всего, то, что надо.
			
			
									
						We are hard at work… for you.   
			
						Как составить описание функции SetFilePointerEx
... , ulong lowLongDistanceToMove, ... - наверно так нужно писать?Дед Пахом писал(а): 17 Июль 2019, 12:19Как-то так, параметр liDistanceToMove передаём двумя LONG, параметр lpNewFilePointer это адрес:Код: Выделить всё
SetFilePointerEx(UNSIGNED,LONG lowLongDistanceToMove,LONG hiLongDistanceToMove,LONG pNewFilePointer,ULONG),BOOL,PASCAL,RAW,NAME('SetFilePointerEx')
C10, Win10x64
			
						- Дед Пахом
 - Старичок
 - Сообщения: 3346
 - Зарегистрирован: 07 Июль 2005, 16:51
 - Откуда: Москва, Россия
 - Благодарил (а): 20 раз
 - Поблагодарили: 56 раз
 - Контактная информация:
 
Как составить описание функции SetFilePointerEx
не принципиально, но по смыслу да, ulong логичнее.vic7tar писал(а): 17 Июль 2019, 17:44... , ulong lowLongDistanceToMove, ... - наверно так нужно писать?
С уважением, ДП
			
						Как составить описание функции SetFilePointerEx
Нет, тут не должно быть логики, вот определение:
Вопрос к стартеру - если не секрет, для чего нужна эта функция?
			
			
									
						Код: Выделить всё
...
typedef union _LARGE_INTEGER {
    struct {
        DWORD LowPart;  <-----------------------------------------------------
        LONG HighPart;
    } DUMMYSTRUCTNAME;
    struct {
        DWORD LowPart;
        LONG HighPart;
    } u;
#endif //MIDL_PASS
    LONGLONG QuadPart;
} LARGE_INTEGER;C10, Win10x64
			
						- Дед Пахом
 - Старичок
 - Сообщения: 3346
 - Зарегистрирован: 07 Июль 2005, 16:51
 - Откуда: Москва, Россия
 - Благодарил (а): 20 раз
 - Поблагодарили: 56 раз
 - Контактная информация:
 
Как составить описание функции SetFilePointerEx
Если в таком же стиле:
			
			
									
						то ну ладно уж.
C10, Win10x64
			
						- 
				Алексей- Софт-Центр
 - Ветеран
 - Сообщения: 392
 - Зарегистрирован: 26 Август 2009, 12:41
 - Откуда: Moscow
 - Контактная информация:
 
Как составить описание функции SetFilePointerEx
Добрый день!
! 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
Алексей
			
			
									
						Работаю с файлами больших размеров, 500 Гб , например.vic7tar писал(а): 17 Июль 2019, 18:02 Вопрос к стартеру - если не секрет, для чего нужна эта функция?
Да, нашел 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
Алексей
- Дед Пахом
 - Старичок
 - Сообщения: 3346
 - Зарегистрирован: 07 Июль 2005, 16:51
 - Откуда: Москва, Россия
 - Благодарил (а): 20 раз
 - Поблагодарили: 56 раз
 - Контактная информация:
 
Как составить описание функции SetFilePointerEx
Код: Выделить всё
  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)С уважением, ДП
			
						- 
				Алексей- Софт-Центр
 - Ветеран
 - Сообщения: 392
 - Зарегистрирован: 26 Август 2009, 12:41
 - Откуда: Moscow
 - Контактная информация:
 
Как составить описание функции SetFilePointerEx
Добрый день!
И снова, Дед Пахом, спасибо большое !
Про Like - и не думал в эту сторону()
Алексей
			
			
									
						И снова, Дед Пахом, спасибо большое !
Про Like - и не думал в эту сторону()
Алексей
- 
				kreator
 - ✯ Ветеран ✯
 - Сообщения: 5235
 - Зарегистрирован: 28 Май 2009, 15:54
 - Откуда: Москва
 - Благодарил (а): 11 раз
 - Поблагодарили: 26 раз
 
Как составить описание функции SetFilePointerEx
Где-то раньше на форуме обсуждали эти переменные. Можно ещё вот так:
Код: Выделить всё
LOC:Int64             group(INT64)
                      end
We are hard at work… for you.   
			
						- 
				Алексей- Софт-Центр
 - Ветеран
 - Сообщения: 392
 - Зарегистрирован: 26 Август 2009, 12:41
 - Откуда: Moscow
 - Контактная информация:
 
Как составить описание функции SetFilePointerEx
Добрый день!
   
Алексей
			
			
									
						Да, так тоже работает. Спасибо)kreator писал(а): 18 Июль 2019, 13:56 Где-то раньше на форуме обсуждали эти переменные. Можно ещё вот так:А совсем без like будет доступно, вероятно, после внедрения полноценной поддержки 64 бита.Код: Выделить всё
LOC:Int64 group(INT64) end
Алексей
