Что нового

Возможна ли работа с классами .NET Framework ?

Luke

Знающий
Сообщения
64
Репутация
14
Есть ли способ взаимодействия с классом XmlReader из AutoIt?, что-то вроде
Код:
$oreader = ObjCreate ("XmlReader.Create("x.xml")")


P.S.
нужен для обработки больших xml файлов (больше 40 мб)
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4 020
Репутация
622
Luke
я не знаком с объектной моделью данной библиотеки. возможно это будет что-то типа
Код:
$oreader = ObjCreate ("XmlReader")
$file = $oreader.Create("x.xml")
 
Автор
L

Luke

Знающий
Сообщения
64
Репутация
14
Пишет :
Код:
C:\scan\test.au3(21,17) : ERROR: syntax error
$file = $reader..
~~~~~~~~~~~~~~~~^
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4 020
Репутация
622
Luke
поправил. две точки конечно же недопустимы
 
Автор
L

Luke

Знающий
Сообщения
64
Репутация
14
Ругается на строку
Код:
$file = $oreader.Create("x.xml")
:
Код:
Variable must be of type "Object".:
$file = $oreader.Create("x.xml")
$file = $oreader^ ERROR
Видимо ошибка в строке
Код:
$oreader = ObjCreate ("XmlReader")
, вот как её исправить незнаю.
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4 020
Репутация
622
попробуй тогда так
Код:
$oreader = ObjCreate ("XmlReader")
$fs = FileRead('x.xml')
$file = $oreader.Create($fs)

или
Код:
$oreader = ObjCreate ("XmlReader")
$fs = FileOpen('x.xml', 0)
$file = $oreader.Create($fs)

не знаю точно какая из конструкций отвечает за этот код на VB
Код:
Dim fs As New FileStream("C:\data\books.xml", FileMode.OpenOrCreate, FileAccess.Read, FileShare.Read)
    ' Create the XmlReader object.
    Dim reader As XmlReader = XmlReader.Create(fs)
End Sub 'FileStream


Добавлено:
Сообщение автоматически объединено:

Luke [?]
Ругается на строку
и
Видимо ошибка в строке
как бы не совсем совместимы. на какую строку ругается, на той и ошибка.


Добавлено:
Сообщение автоматически объединено:

да. по всей видимости ты прав и объект не создается. @error возвращает какую то ересь
 

RUVATA

лучше один раз увидеть, чем десять раз услышать...
Сообщения
132
Репутация
38
Уважаемый, Luke
Luke сказал(а):
доступ к классам NET Framework, осуществляется по средствам строго определения, следуя всей иерархии класса
пройдите по этой ссылке
http://msdn.microsoft.com/ru-ru/library/ms229335.aspx
и поищите интересующий Вас класс, и обращайтесь при создании объекта к нему по полному имени класса



Добавлено:
Сообщение автоматически объединено:

В Вашем случае похоже System.Xml.XmlReader
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4 020
Репутация
622
RUVATA
не камрад, так тоже не создается объект
 
Автор
L

Luke

Знающий
Сообщения
64
Репутация
14
Можно пример как с ними работать ?. Пробовал System, System.Xml - все равно ошибка

Вычитал что нужный класс надо сначала зарегистрировать как СOM - сервер так:
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727>regasm System.XML.dll /tlb:System.XML.tlb
Зарегистрировал, всё равно не работает, что ещё надо не пойму.
 

RUVATA

лучше один раз увидеть, чем десять раз услышать...
Сообщения
132
Репутация
38
Luke, Очень озадачен поднятым Вами вопросом...
И действительно - здесь не все так просто...
Пытаюсь "вкурить" в чем дело, но пока безрезультатно,
если что вымучаю отпишусь обязательно.

Вычитал что нужный класс надо сначала зарегистрировать как СOM - сервер так:C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727>regasm System.XML.dll /tlb:System.XML.tlb
http://forum.script-coding.info/viewtopic.php?id=1139 - тоже почитал,
есть в этом доля правды (доля) там речь идет о VBScript через WBSH
э-т отдельная вотчина:smile:

Теоретически все компоненты .NET FrameWork уже зарегистрированы.
Так как скомпилированные приложения написанные на том-же VB.NET, не требуют никакой регистрации для того чтобы пользоваться классами NET Framework. (сборка System.xml - вряд ли исключение)
Хотя черт ее разберет, я хоть и довольно опытный "дотнетчик" но во многие фундаментальные моменты не вникал (а надо бы)

Суть такова, есть несколько вариантов:
1) Встроенная функция AutoIT - ObjCreate видимо как-то своеобразно подключается/захватывает COM-объект, в отличии от ее аналогов в "полноценных ООП языках"(C#, VB.NET, Java). Их компилятор сам решает кучу вопросов связанных с DCOM, DOM, OLE и прочими прелестями COM-технологии. От прогера необходимо лишь подключить необходимую сборку.
2) Мы не правильно "захватываем" объект, н/п открытая книга Office Excel хватается как "Excel.Application", хотя в OLE зарегано вобще "что-то с чем-то" а именно "Office (Microsoft Office 12.0 Object Library) \ OfficeDataSourseObject"
(если я правильно определил :smile: - там тож.черт ногу сломит)
3) И есть еще одна догадка... у xmlReader, так-же как StreamReader в .NET есть ряд методов которые требуют чтобы язык предусматривал перегрузку операторов (перегрузку методов в данном случае), возможно что некоторые классы могут использоваться только NET-языками ,и AutoIT это просто не под силу.
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4 020
Репутация
622
RUVATA [?]
открытая книга Office Excel хватается как "Excel.Application", хотя в OLE зарегано вобще
оно зарегано как надо, только надо смотреть не название, а один из атрибутов. не помню точно какой, что-то типа IDispatch, в этом духе. его наличие/значение влияет на возможность/название подключения
 
Верх