23.10.2007, 10:00 | #1 |
Участник
|
склонение ФИО и использование dll библиотеки
Возникла задача сделать склонение по падежам ФИО. После поиска по сети был найден следующий ресурс — тут. dll скачал, установил написал следующий код
PHP код:
Как исправить? Axapta 3.0 sp 5 fp 1 |
|
23.10.2007, 10:58 | #2 |
MCTS
|
предпоследний параметр - наверняка указатель (Pointer)
|
|
23.10.2007, 11:10 | #3 |
Участник
|
1. Можно через COM
2. Порадовало "function GetSex" |
|
23.10.2007, 11:43 | #4 |
Участник
|
переписал вот так, в ответ — пустота
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 |
Administrator
|
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, тоже допускает использование инициалов и может выполнять преобразование имен типа китайских. Для корректной работы функции необходимо наличие трех компонент ФИО (имена китайского типа допускается задавать двумя словами). В ряде случаев правильно обрабатываются ФИО, записанные в формате "Фамилия Имя [Имя]". ЗЫ. PChar в дельфях это указатель.
__________________
Был грязный плащ на нем одет, Цилиндр черный смят в гармошку... |
|
23.10.2007, 12:28 | #6 |
Участник
|
а почему в описании начинается с одного 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 |
MCTS
|
потому-что вызывается функция 'GetFIOPadegAS', там все в порядке
|
|
23.10.2007, 12:37 | #8 |
MCTS
|
Потому что NetBus юзает
//function GetFIOPadegAS(pLastName, pFirstName, pMiddleName: PChar; // nPadeg: LongInt; pResult: PChar; // var nLen: LongInt): Integer; stdcall; export;
__________________
В глухомани, в лесу Несмотря на красу Дни проводит Лиса Патрикевна. Я никак не пойму Отчего, почему Не пускают куму На деревню |
|
23.10.2007, 12:38 | #9 |
MCTS
|
Всех запутал
GetFIOPadegAS GetFIOPadegFS....
__________________
В глухомани, в лесу Несмотря на красу Дни проводит Лиса Патрикевна. Я никак не пойму Отчего, почему Не пускают куму На деревню |
|
23.10.2007, 12:40 | #10 |
Участник
|
Прошу прощения функция GetFIOPadegAS.
|
|
23.10.2007, 13:31 | #11 |
Участник
|
В итоге вот так работает
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 |
Участник
|
Всем спасибо. Разобрался.
|
|