|
![]() |
#1 |
Участник
|
Короче добился я своей цели, правда огромными усилиями. Использовал функции, написанные в проектах Andy_D и Yegor (DBF без ODBC).
И самое главное - это работает! и работает быстро. #winapi #DEFINE.FILE_SHARE_READ(0x00000001) #DEFINE.FILE_SHARE_WRITE(0x00000002) #DEFINE.FILE_SHARE(#FILE_SHARE_READ | #FILE_SHARE_WRITE) #define.FILE_FLAG_RANDOM_ACCESS(0x10000000) #define.FILE_BEGIN (0) protected void DisableIndex(FileName fileName) { int hFile; binary Value = new Binary(1); int createFile() { DLL _winApiDLL = new DLL('KERNEL32'); DLLFunction _createFile = new DLLFunction(_winApiDLL, 'CreateFileA'); ; _createFile.returns(ExtTypes: ![]() _createFile.arg(ExtTypes::String); // lpFileName _createFile.arg(ExtTypes: ![]() _createFile.arg(ExtTypes: ![]() _createFile.arg(ExtTypes: ![]() _createFile.arg(ExtTypes: ![]() _createFile.arg(ExtTypes: ![]() _createFile.arg(ExtTypes: ![]() return _createFile.call(fileName, #GENERIC_WRITE, #FILE_SHARE, 0, #OPEN_EXISTING, #FILE_FLAG_RANDOM_ACCESS, 0); } void writeFile(int hWnd, Binary Buffer, int size) { DLL _winApiDLL = new DLL('KERNEL32'); DLLFunction _writeFile = new DLLFunction(_winApiDLL, 'WriteFile'); int Result; Binary RetValue = new Binary(4); int Temp; _writeFile.returns(ExtTypes: ![]() _writeFile.arg(ExtTypes: ![]() _writeFile.arg(ExtTypes::Pointer); _writeFile.arg(ExtTypes: ![]() _writeFile.arg(ExtTypes::Pointer); _writeFile.arg(ExtTypes: ![]() Temp = _writeFile.call(hWnd,Buffer,size,RetValue,0); info(int2str(RetValue.dWord(0))); if (Temp == 0) { throw error("Функция WriteFile вернула ошибку " + int2str(WinApi::getLastError())); } Result = RetValue.byte(0) + RetValue.byte(1)*256 + RetValue.byte(2)*256*256 + RetValue.byte(3)*256*256*256; if (Result != size) { throw error("Функция WriteFile вызвала ошибку записи в файл"); } } int setFilePointer(int handle, int distancel, int moveMethod) { DLL _winApiDLL = new DLL('KERNEL32'); DLLFunction _setFilePointer = new DLLFunction(_winApiDLL, 'SetFilePointer'); _setFilePointer.returns(ExtTypes: ![]() _setFilePointer.arg(ExtTypes: ![]() ![]() ![]() ![]() if (_setFilePointer.call(handle, distancel, 0 , moveMethod) == 0) return WinApi::getLastError(); else return 0; } ; hFile = createFile(); if (hFile != #INVALID_HANDLE_VALUE) { setFilePointer(hfile, 28, #FILE_BEGIN); value.byte(0,0); writeFile(hfile, value, 1); Winapi::closeHandle(hFile); } } Последний раз редактировалось CHESER85; 09.08.2012 в 09:28. |
|
|
Опции темы | Поиск в этой теме |
Опции просмотра | |
|