Показать сообщение отдельно
Старый 22.07.2015, 19:39   #3  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,275 / 3476 (122) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Цитата:
Сообщение от 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-методов соответствует требуемому количеству возвращаемых Вам значений
__________________
Возможно сделать все. Вопрос времени