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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 23.10.2007, 10:00   #1  
NetBus is offline
NetBus
Участник
 
200 / 85 (3) ++++
Регистрация: 08.07.2005
Адрес: Москва
склонение ФИО и использование dll библиотеки
Возникла задача сделать склонение по падежам ФИО. После поиска по сети был найден следующий ресурс — тут. dll скачал, установил написал следующий код
PHP код:
static void Job78(Args _args)
{
    
str           _text;

    
DLL           _DLL;
    
DLLFunction   _dllFunction;
;
    
_DLL = new DLL('padeg.dll');

    if(!
_DLL)
        throw 
error("Ошибка загрузки библиотеки.");

    
_dllFunction = new DLLFunction(_DLL,'GetFIOPadegFS');

    
_dllFunction.returns(ExtTypes::String);
    
_dllFunction.arg(ExtTypes::String,
                     
ExtTypes::String,
                     
ExtTypes::String,
                     
ExtTypes::DWORD,
                     
ExtTypes::String,
                     
ExtTypes::DWORD);

    if(!
_dllFunction)
        throw 
error(strFmt("Функция %1 не обнаружена"'GetFIOPadegAS'));

    
_dllFunction.call("Иванов""Иван""Иванович"5_text200) ;

    print 
_text;
    
pause;

в итоге имеем при запуске ошибку, — "Функция "GetFIOPadegFS" в библиотеке DLL "padeg.dll" повлекла возникновение исключительной ситуации."
Как исправить? Axapta 3.0 sp 5 fp 1
Старый 23.10.2007, 10:58   #2  
Eldar9x is offline
Eldar9x
MCTS
Аватар для Eldar9x
Oracle
MCBMSS
 
1,064 / 166 (8) ++++++
Регистрация: 29.09.2006
Адрес: Казань
предпоследний параметр - наверняка указатель (Pointer)
Старый 23.10.2007, 11:10   #3  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
1. Можно через COM
2. Порадовало "function GetSex"
Старый 23.10.2007, 11:43   #4  
NetBus is offline
NetBus
Участник
 
200 / 85 (3) ++++
Регистрация: 08.07.2005
Адрес: Москва
переписал вот так, в ответ — пустота
X++:
static void padegDll(Args _args)
{
    str           i;
    str           folder;

    DLL           _DLL;
    DLLFunction   _dllFunction;

    Binary        _text;
;
    _text    = new binary(200);
    _text.string(0, folder);

    _DLL = new DLL('padeg.dll');

    if(!_DLL)
        throw error("Ошибка загрузки библиотеки.");

    _dllFunction = new DLLFunction(_DLL,'GetFIOPadegFS');

    _dllFunction.returns(ExtTypes::Pointer);
    _dllFunction.arg(ExtTypes::String,
                     ExtTypes::String,
                     ExtTypes::String,
                     ExtTypes::DWORD,
                     ExtTypes::Pointer,
                     ExtTypes::DWORD);

    if(!_dllFunction)
        throw error(strFmt("Функция %1 не обнаружена", 'GetFIOPadegAS'));

    if(_dllFunction.call("Иванов", "Иван", "Иванович", 5, _text, 200))
    {
        folder =  _text.string(0);
        print folder;
        pause;
    }

}
Старый 23.10.2007, 12:24   #5  
Aleksey_M is offline
Aleksey_M
Administrator
Аватар для Aleksey_M
 
520 / 355 (13) ++++++
Регистрация: 26.08.2005
Адрес: Москва
NetBus
Цитата:
5.2.3. GetFIOPadegFS
function GetFIOPadegFS(pFIO: PChar; bSex: Boolean; nPadeg: LongInt;
pResult: PChar; var nLen: LongInt):Integer; stdcall;
export;

Помещает в буфер (pResult) размера (nLen) результат склонения фамилии имени и отчества, записанных одной строкой (pFIO), рода (bSex) в заданный падеж (nPadeg). Значение функции — результат выполнения операции преобразования.

Функция выполняет преобразование ФИО, заданного одной строкой и требует явного указания рода. Порядок следования составляющих ФИО в строке параметра — фамилия, имя, отчество. Эта функция, как и GetFIOPadeg, тоже допускает использование инициалов и может выполнять преобразование имен типа китайских. Для корректной работы функции необходимо наличие трех компонент ФИО (имена китайского типа допускается задавать двумя словами). В ряде случаев правильно обрабатываются ФИО, записанные в формате "Фамилия Имя [Имя]".
Я X++ не знаю, но что то мне подсказывает, что несколько неправильно вызывается функция в части аргументов
ЗЫ. PChar в дельфях это указатель.
__________________
Был грязный плащ на нем одет,
Цилиндр черный смят в гармошку...
Старый 23.10.2007, 12:28   #6  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
а почему в описании начинается с одного pChar'а, а в X++ целых 3?

X++:
//GetFIOPadegFS(
   _dllFunction.arg(
//pFIO: PChar; 
ExtTypes::String,
// убираем                    ExtTypes::String,
// убираем                    ExtTypes::String,
// bSex: Boolean; 
                     ExtTypes::DWORD,
// pResult: PChar; 
                     ExtTypes::Pointer,
// var nLen: LongInt):  --- тут тоже поинтер (ключевое слово VAR)
                     ExtTypes::Pointer)

Последний раз редактировалось belugin; 23.10.2007 в 12:30.
Старый 23.10.2007, 12:33   #7  
Eldar9x is offline
Eldar9x
MCTS
Аватар для Eldar9x
Oracle
MCBMSS
 
1,064 / 166 (8) ++++++
Регистрация: 29.09.2006
Адрес: Казань
потому-что вызывается функция 'GetFIOPadegAS', там все в порядке
Старый 23.10.2007, 12:37   #8  
Russland is offline
Russland
MCTS
Аватар для Russland
MCBMSS
 
267 / 116 (4) +++++
Регистрация: 17.10.2005
Адрес: Донеччина, Україна
Потому что NetBus юзает
//function GetFIOPadegAS(pLastName, pFirstName, pMiddleName: PChar;
// nPadeg: LongInt; pResult: PChar;
// var nLen: LongInt): Integer; stdcall; export;
__________________

В глухомани, в лесу Несмотря на красу Дни проводит Лиса Патрикевна. Я никак не пойму Отчего, почему Не пускают куму На деревню
Старый 23.10.2007, 12:38   #9  
Russland is offline
Russland
MCTS
Аватар для Russland
MCBMSS
 
267 / 116 (4) +++++
Регистрация: 17.10.2005
Адрес: Донеччина, Україна
Всех запутал
GetFIOPadegAS GetFIOPadegFS....
__________________

В глухомани, в лесу Несмотря на красу Дни проводит Лиса Патрикевна. Я никак не пойму Отчего, почему Не пускают куму На деревню
Старый 23.10.2007, 12:40   #10  
NetBus is offline
NetBus
Участник
 
200 / 85 (3) ++++
Регистрация: 08.07.2005
Адрес: Москва
Прошу прощения функция GetFIOPadegAS.
Старый 23.10.2007, 13:31   #11  
Ed1k is offline
Ed1k
Участник
 
102 / 42 (2) +++
Регистрация: 19.07.2006
В итоге вот так работает
X++:
Binary text = new Binary(200);
Binary len = new Binary(4);
;

dllFunction = new DLLFunction(DLL, 'GetFIOPadegAS');
dllFunction.returns(ExtTypes::DWord);
dllFunction.arg(ExtTypes::String,
                ExtTypes::String,
                ExtTypes::String,
                ExtTypes::DWord,
                ExtTypes::Pointer,
                ExtTypes::Pointer);

len.dWord(0, 200);
dllFunction.call("Иванов", "Иван", "Иванович", 5, text, len);
info(text.string(0));
За это сообщение автора поблагодарили: NetBus (1), Egesihora (1).
Старый 23.10.2007, 14:00   #12  
NetBus is offline
NetBus
Участник
 
200 / 85 (3) ++++
Регистрация: 08.07.2005
Адрес: Москва
Всем спасибо. Разобрался.
Теги
ax3.0

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
HRM,склонение ФИО и все все все OmenSore DAX: Функционал 22 09.02.2009 17:08
Использование .Net библиотеки monk DAX: Программирование 3 21.01.2008 15:01
Client Axapta 3.0 SP4 и Linux. Как запустить? Daiver DAX: Администрирование 10 28.06.2007 15:59
при вызове функции из своей DLL, вылетает ошибка Delfins DAX: Программирование 9 07.03.2006 19:29
Использование функций DLL in Axapta ddadream DAX: Функционал 1 29.07.2003 13:54
Опции темы Поиск в этой теме
Поиск в этой теме:

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

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 20:59.