![]() |
#1 |
Участник
|
![]()
Здравствуйте!
Существует необходимость в использовании системных функций, таких как CreateFile и WriteFile. Первую по образу и подобию обертки, уже имеющейся в аксапте, смог для себя приспособить (тот вариант, что был - слишком уж урезан). Но разобраться окончательно - не смог. Подскажите, как обернуть функцию WriteFile из библиотеки Kernel32.dll? |
|
![]() |
#2 |
Участник
|
Посмотрите на класс WinAPI
В частности на метод WinAPI::createFile Хотя я бы посоветовал воспользоваться классами BinaryIO, AsciiIO, CommaIO и т.п. Их описание можно найти в ветке AOT \ System Documentation \ Classes |
|
![]() |
#3 |
Участник
|
![]()
Именно из WinAPI::createFile я и скопировал обертку к CreateFile, внеся все необходимые коррективы.
Но то же самое сделать для функции WriteFile не получается. Видимо я не до конца понял механизм изготовления таких оберток. Пробовал сделать так: PHP код:
Сама функция: PHP код:
|
|
![]() |
#4 |
Участник
|
Может вместо BOOL написать INT?
|
|
![]() |
#5 |
Участник
|
Требуется совет опытного программиста Аксапты
Я пробовал разные варианты и пришел к единственному выходу - это сделает только тот, кто умеет, а не тот, кто догадывается...
Надеюсь, что такой человек здесь появится... |
|
![]() |
#6 |
Участник
|
Могу лишь заметить, что в Axapta есть обертка для функции:
PHP код:
PHP код:
|
|
![]() |
#7 |
Участник
|
DLL _winApiDLL = new DLL('KERNEL32');
DLLFunction _writeFile = new DLLFunction(_winApiDLL, 'WriteFile'); _writeFile.returns(ExtTypes: ![]() _writeFile.arg(ExtTypes: ![]() _writeFile.arg(ExtTypes::Pointer); _writeFile.arg(ExtTypes: ![]() _writeFile.arg(ExtTypes::Pointer); _writeFile.arg(ExtTypes::Pointer); |
|
![]() |
#8 |
Участник
|
Не помогло...
Придется писать свою DLL. |
|
![]() |
#9 |
Участник
|
Просто из любопытства.
а BinaryIO вас чем не устраивает? |
|
![]() |
#10 |
Участник
|
mazzy, Если Вы способны написать пример записи через BinaryIO в LPT? - буду очень благодарен.
|
|
![]() |
#11 |
Участник
|
Вместо смайлик-word естественно должно быть dword. Скрипт накосячил.
|
|
![]() |
#12 |
Участник
|
Я так понимаю, что пример из хелпа вы уже делали
PHP код:
придет человек, проверим на его нормальном компьютере. А в чем проблемы? |
|
![]() |
#13 |
Участник
|
mazzy, Попробовал предложенное - ошибок нет, но и результата никакого нет...
|
|
![]() |
#14 |
Участник
|
у нас тоже протестировать не получилось поскольку lpt-принтер отсутствует.
код что-то посылает на lpt и ждет ответа с линии. Если ответа нет, то lpt считается занятым (busy). Аксапта в этот момент ждет и не отвечает. Ведет себя также как команда DOS copy file lpt1: У кого есть lpt принтер? Желательно матричный. Проверьте, пожалуйста. Не забудьте поставить перевод строки. PHP код:
|
|
![]() |
#15 |
Участник
|
Цитата:
Изначально опубликовано Wing
mazzy, Попробовал предложенное - ошибок нет, но и результата никакого нет... Или у вас какое то свое устройство на lpt повешено? |
|
![]() |
#16 |
Участник
|
Устройство не освсем обычное, но и не особо от принтеров отличающееся: термопринтер для печати этикеток.
Вот это пробовал: PHP код:
|
|
![]() |
#17 |
Участник
|
![]()
Поскольку принтер будет стоять в строго определенном месте, а сама аксапта будет стартовать с тучи разных расположений, было решено сделать сервер для принтера и отсылать ему по сети задачи на печать.
Сервер уже есть и есть рабочая DLL для отправки серверу. Теперь необходимо реализовать одно из двух:
Напрямую с сокетами аксапта работать может? С подключением библиотеки я пока не справился... аксапта падает вот код: PHP код:
Stackdump exit code 487 (Попытка обращения к неверному адресу) кстати int внутри returns не понимается... там понимается только ExtTypes. |
|
![]() |
#18 |
Участник
|
![]()
Сразу поправлюсь:
пути аксапта понимает только с двумя "\\", но этот форум почемуто заменяет 2 на 1. |
|
![]() |
#19 |
Участник
|
Про сокеты. посмотрите tutorial_TicTacToe
подробно не разбирался. Но сокеты там используются. Про задачу. Подореваю, что это не последнее изменение вашей задачи. ![]() Не торопитесь исполнять ее в таком виде. |
|
![]() |
#20 |
----------------
|
Пример
Смотрим класс WinAPI
PHP код:
DWORD GetFileAttributes(LPCTSTR lpFileName) Делаем вывод, что для передачи в качестве параметра указателя на строку надо использовать arg(ExtTypes::STRING) |
|
Теги |
winapi, файл |
|
![]() |
||||
Тема | Ответов | |||
Документация по функциям | 1 | |||
Что передается функциям, ссылки или значения? | 4 | |||
поиск по ветвям "доступ к функциям" | 2 |
|