|
14.05.2007, 14:00 | #1 |
Участник
|
WinAPI и работа с файлами
суть проблемы (ax3.0sp2):
метод WinAPI::copyFile копирует файл и в случае неудачи возвращает код ошибки WinAPI::getLastError(). НО все хорошо ТОЛЬКО при работе на клиенте, при вызове copyFile на сервере (серверный клас/метод) и возникновении ошибки копирования происходит следующее: CopyFileA говорит что ошибка есть, а getLastError возвращает 0 (как бы нет никакой ошибки), в результате функция WinAPI::copyFile возвращает 0 что в нашем случае обозначает "нет ошибки". 1) Возможные решения: а) проверять кодвозврта в getLastError и в случае результата 0 - подменять на что то общее, но это малоинформативно. б) поправить каждый метод использующий getLastError - т.е. в случае 0 возвращать свой код. 2) Интересно в каком паке это пофиксили (а может еще и не пофиксили) есть еще идеи ??
__________________
--- SHiSHok |
|
14.05.2007, 15:27 | #2 |
Microsoft Dynamics
|
1.а) а если таки нет никаких ерроров, то тогда будет выдываться какой-то другой код как-будто еррор есть?
2) я вижу, что есть в сп2 какие-то изменения в getLastError // Syp Modifications - SP2 - BEGIN, может ревертнуть ? Возможно, что копирование происходит на сервере, а getLastError - на клиенте? в 4ке вообще эти 2 функции теперь с модификатором клиента. Но в 4ке есть метод обхода, насчет 3ки пока не видела |
|
14.05.2007, 16:19 | #3 |
Участник
|
Цитата:
Вызов getLastError обычно происходит в случае неудачного исполнения какой либо функции винапи, посему не вижу смысла вызова этого метода без видимых на то причин. По крайней мере вызов getLastError в классе WinAPI (и несколько методов др. классов) происходит именно из таких соображений . Цитата:
Насчет модификатора client: С точки зрения безопасности может это и правильно - клиент не получит доступа к ресурсам не имея доступ, но опять же - все в руках программиста. У меня же класс именно копирует пользователю данные, доступа к которым напрямую у него нет.
__________________
--- SHiSHok |
|
15.05.2007, 11:31 | #4 |
Участник
|
Пока сделал так:
X++: client server static int getLastError() { int err; err = DLL::lastDLLError(); return err ? err : #ERROR_FILE_OPERATION; //SHiSHok, server site call returns 0 } по крайней мере теперь есть реакция на ненормальное завершение файловых операций.
__________________
--- SHiSHok |
|
14.05.2007, 15:42 | #5 |
Участник
|
В KR2 работает
__________________
Axapta v.3.0 sp5 kr2 |
|
Теги |
ax3.0 |
|
Похожие темы | ||||
Тема | Ответов | |||
Работа с файлами Excel | 2 | |||
Работа с файлами | 1 | |||
Dynamics AX Geek: Finding files with WinAPI | 0 | |||
WinApi. Удаление файлов глючит. | 10 |
|