AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 11.10.2017, 11:54   #1  
kia is offline
kia
Участник
 
96 / 19 (1) ++
Регистрация: 07.10.2008
Адрес: Харьков
ref Byte[] на Х++
Имеется функция в библиотеке, один из параметров которой описан как "ref Byte[] cert".
Нужно его передать и получить из него данные в АХ2009.

Вызов через .Net пока не подходит. Нужно чисто на Х++.
С out параметром проблем нет. Описываем его как Pointer передаем в него класс Binary.
Но здесь ret и еще Byte[].
Старый 11.10.2017, 12:21   #2  
VORP is offline
VORP
Участник
Аватар для VORP
 
146 / 95 (4) ++++
Регистрация: 26.05.2006
А в чём проблема - в том что Ref или что массив? Можно попробовать использовать массив, синтаксис такой:
System.Object[] parameters = new System.Object[100]();
Старый 11.10.2017, 12:44   #3  
dmn is offline
dmn
Участник
 
9 / 18 (1) ++
Регистрация: 25.09.2014
Цитата:
Сообщение от kia Посмотреть сообщение
ref Byte[] cert
Вроде как ref в отличии от out требует обязательной инициализации переменной.
Попробуйте перед вызовом присвоить cert = new System.Byte[]();
а потом уже NET.func(byref cert);
Старый 11.10.2017, 12:46   #4  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2922 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
byref добавили только в 2012 придется, наверное, через reflection
Старый 11.10.2017, 12:58   #5  
dmn is offline
dmn
Участник
 
9 / 18 (1) ++
Регистрация: 25.09.2014
Цитата:
Сообщение от belugin Посмотреть сообщение
Справка по 2009 говорит иначе:
Цитата:
byref Keyword
Support for calling .NET Framework assemblies, those managed by the common language runtime (CLR), has been enhanced by the addition of the byref keyword. This enables you to write X++ code that calls a C# method that requires either an out or ref parameter.

For more information, see How to: Use the byref Keyword for CLR Interop.
Да и пробовали. Пока не присвоили при вызове значение - ругалось.

Вот, там-же)

Последний раз редактировалось dmn; 11.10.2017 в 13:04.
За это сообщение автора поблагодарили: Logger (1).
Старый 11.10.2017, 13:16   #6  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2922 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Упс, перепутал версии, тогда прочитать еще вот это: How to: Use X++ Syntax for CLR Arrays и скомбинировать, должно сработать
Старый 11.10.2017, 14:41   #7  
kia is offline
kia
Участник
 
96 / 19 (1) ++
Регистрация: 07.10.2008
Адрес: Харьков
Цитата:
Сообщение от dmn Посмотреть сообщение
Вроде как ref в отличии от out требует обязательной инициализации переменной.
Попробуйте перед вызовом присвоить cert = new System.Byte[]();
а потом уже NET.func(byref cert);
Не помогло
Вот код
X++:
    DLLFunction   func        = new DLLFunction(dll, 'EUGetFileSignerInfo');
    Binary        pCertInfoEx = new Binary(100);
    System.Byte[] cert        = new System.Byte[100]();
    int           ret;
    ;

    func.returns(ExtTypes::DWord);
    func.arg(ExtTypes::DWord, ExtTypes::String, ExtTypes::Pointer, ExtTypes::Byte);

    ret = func.call(_signIndex, _fileNameWithSign, pCertInfoEx, byref cert);
Все равно func.call говорит, что функция привела к возникновению исключения.
Старый 11.10.2017, 14:58   #8  
dmn is offline
dmn
Участник
 
9 / 18 (1) ++
Регистрация: 25.09.2014
Я вас не понял. System.Byte[] тут не при чем. Думал что это вызов функции .Net

Может поможет. Вот здесь пишут, если я правильно понял (не силен в украинском), что функция EUGetFileSignerInfo принимает 5 параметров. Вы 5 параметр PDWORD pdwCertifiacateLength потеряли. Не?
За это сообщение автора поблагодарили: kia (1).
Старый 11.10.2017, 15:36   #9  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2922 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
А.. есть бинарная функция параметр которой на C# записывается как ref Byte[] (получается
то char * на C++) соответственно надо создать binary нужной длинны и передать.
Старый 11.10.2017, 15:42   #10  
kia is offline
kia
Участник
 
96 / 19 (1) ++
Регистрация: 07.10.2008
Адрес: Харьков
Цитата:
Сообщение от dmn Посмотреть сообщение
Может поможет. Вот здесь пишут, если я правильно понял (не силен в украинском), что функция EUGetFileSignerInfo принимает 5 параметров. Вы 5 параметр PDWORD pdwCertifiacateLength потеряли. Не?
Да. Я писал на основе документации по .Net обертке, а в ней длину убрали.
Спасибо
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Метод в Ax2012-вебсервисе с ключевым словом REF Pandasama DAX: Программирование 2 22.11.2016 05:14
Работа с System.Byte[][] _ALMO_ DAX: Программирование 5 24.11.2013 12:24
emeadaxsupport: Blocks in X++ report when printed to PDF and using a Double byte based language Blog bot DAX Blogs 0 08.02.2012 21:12
emeadaxsupport: Blocks in X++ report when printed to PDF and using a Double byte based language Blog bot DAX Blogs 0 08.02.2012 21:12
Kashperuk Ivan: Casing and text search/comparison tutorial Blog bot DAX Blogs 6 25.02.2010 15:41
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 19:00.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.