|
|
#1 |
|
Британский учённый
|
CLR в пакетной обработке
Добрый день,
Борюсь уже второй день с попытками заставить работать пакетный класс. На клиенте работает, на сервере нет. Код: Error executing code: CLRObject object not initialised. X++: System.IO.DirectoryInfo dirInfo;
System.Type arrayType;
System.Array array;
System.IO.FileInfo fileInfo;
counter filesCnt;
int i;
InteropPermission interopPerm;
FileIOPermission filePerm;
System.Exception clrException;
;
interopPerm = new InteropPermission(InteropKind::ClrInterop);
interopPerm.assert();
dirInfo = new System.IO.DirectoryInfo(_fromFolder);
arrayType = System.Type::GetType("System.IO.FileInfo");
array = System.Array::CreateInstance(arrayType, 1);
array = dirInfo.GetFiles();
filesCnt = array.get_Length();
for (i = 0; i < filesCnt; i++)
{
fileInfo = array.GetValue(i);
fileName = fileInfo.get_FullName();
info(fileName);
}AX 2009 SP1 RU7
__________________
Людям физического труда для восстановления своих сил нужен 7-8 часовой ночной сон. Людям умственного труда нужно спать часов 9-10. Ну а программистов будить нельзя вообще. |
|
|
|
|
#2 |
|
Участник
|
Я написал несколько иначе - все работает.
Разница в инициализации CLR объектов - сравните, может быть натолкнет на мысль. Думаю, суть статичных методов dev_netInt и dev_netStr - будет понятна (это у меня методы класса global)... X++: static server container serverFileList(str _filePathServer, str _fileMask = '*.*') { System.IO.DirectoryInfo directoryInfo; System.IO.FileInfo[] fileInfoArray; System.IO.FileInfo fileInfo; container ret; int i; ; new InteropPermission(InteropKind::ClrInterop).assert(); try { directoryInfo = new System.IO.DirectoryInfo(_filePathServer); fileInfoArray = directoryInfo.GetFiles(_fileMask); for (i = 0; i < dev_netInt(fileInfoArray.get_Length()); i++) { fileInfo = fileInfoArray.GetValue(i); ret += dev_netStr(fileInfo.get_Name()); } return ret; } catch (Exception::CLRError) { throw error(AifUtil::getClrErrorMessage() ); } } |
|
|
|
| За это сообщение автора поблагодарили: Link (4). | |
|
|
|