22.07.2015, 19:39 | #3 |
Administrator
|
Цитата:
Сообщение от Arahnid
Цель - у меня есть библиотека с кучей функций.
Одна из функций на вход получает период накладных и должна вернуть списком номер и даты накладных за период. Читаю документацию https://msdn.microsoft.com/en-US/lib...(v=ax.50).aspx Возникли вопросы (писала в коде) X++: static void importOle(Args _args) { DLL dllOle = new DLL("dLLOLE.dll");//определяем название dll - она должна лежать в Bin клиента //1. если клиент стоит на клиентских машинах, то необходимо его туда копировать? //2. можно ли написать полный путь на сервер к библиотеке? DLLFunction dllFunction = new DLLFunction(dllOle,"FunctionName"); ; dllFunction.returns(ExtTypes::DWord);//3. Это типы возвращаемых значений? dllFunction.arg(ExtTypes::DWord);//4. Это определение типов переменных на вход в функцию? dllFunction.call('Value'); //5. Это передача значений переменных в функцию и результата запроса? //6. каким образом получить данные, если возвращается много строк? Например, номера накладных и их дат за период //7. каким образом получить две переменные, возвращаемые функцией? } 1. Если Вы сами кладете dll в Bin клиента - то да, надо копировать. Есть семейство классов SysFileDeployment - они как раз занимаются тем, что копируют с сервера на клиент dll-ку при старте АХ. Т.е. dll-ка изначально кладется на сервер (кажется в Bin сервера), а каждый клиент при старте себе ее забирает и кладет в Bin клиента. Единственное - какие тут могут быть грабли - это "защита" Windows, начиная с Vista от копирования в Program Files. Тут нужно тестировать права. 2. Помню, что в старых версиях как-то не получилось с ходу прописать путь, вышли в результате на классы SysFileDeployment и решили, что именно этот вариант реализуем в АХ (т.е. когда dll-ка лежит в строго обозначенном каталоге). Если кто-то знает решение - то будет здорово. 3,4. Да 5. Да, но тут еще может использоваться тип COMVariant и соответственно - может потребоваться преобразование типов 6,7. Нужно смотреть - что за тип возвращает dll-ка. Базовые типы везде одинаковы (и то с той же датой или дробным числом могут быть заморочки). А вот если dll-ка умеет возвращать много строк - значит она возвращает некий объект. В этом случае - надо думать, как этот объект можно передать в АХ. Как вариант - массив Array. Но в идеале - если dll-ка связана с .NET - то попробовать использовать .net-овские типы / объекты. Например, в АХ 2012 своеобразным паттерном (шаблоном) является использование класса-контракта. Т.е. функция возвращает объект (класс), который АХ "распознает", как класс. И у этого класса количество parm-методов соответствует требуемому количеству возвращаемых Вам значений
__________________
Возможно сделать все. Вопрос времени |
|
Теги |
dll, dllfunction |
|
Похожие темы | ||||
Тема | Ответов | |||
Ax3 and Win2008 для печати | 13 | |||
MSDAX 4.0 и планировщик win server 2008 | 11 | |||
Установка Ax2009 на локалку | 23 | |||
при вызове функции из своей DLL, вылетает ошибка | 9 | |||
работа с wininet.dll | 8 |
|