#0
by The gray Cardinal
Классы .NET могут быть спрограммированы таким образом, что они будут доступны как COM-объекты, надо только их зарегистрировать специальной утилитой. Многие стандартные классы .NET Framework поддерживают такую возможность. Например, командная строка регистрации: C:WINDOWSMicrosoft.NETFrameworkv2.0.50727>regasm System.dll После этого на VBScript будет работать, например, такой код: Set web = CreateObject("System.Net.WebClient") web.DownloadFile "http://mysite.com/", "c: empmyfile.htm" Этот скрипт сохранит страничку "http://mysite.com/" в файл "c: empmyfile.htm". Кроме того, существует якобы универсальный COM-Wrapper для .NET: Правда, проекту тыщу лет вчера. По ссылке есть бинарник и исходник. Однако, бинарник (DLL) под Windows XP даже не регистрируется (выдаёт ошибку). Если пересобрать из исходника, уже регистрируется, но при любом вызове приводит к краху Windows Script Host. Просьба к умелым пользователям MS Visual Studio: может, проект можно "починить"? Иметь такой универсальный COM-Wrapper для .NET было бы весьма удобно, имхо...
#2
by The gray Cardinal
Говорю же, не спасёт :) Если при любом вызове происходит крах Windows Script Host, кому нужен такой "компонент"?
#6
by The gray Cardinal
Дык по ссылке приведено, например: Set stack = GetObject("dm.net:['mscorlib']System.Collections.Stack") stack.Push ".NET" stack.Push "Hello " MsgBox stack.Pop & stack.Pop Если у тебя это не падает, please, выложи DLL на файлообменник.
#7
by Кириллка
Исследования показали: реализована эта штуковина под framework 1.x причем, похоже, пяткой левой ноги :) - запрашивается объект класса (в 1.x работает, в 2.x он уже другой и схема работы другая) и не проверяется на удачность создания. Т.е. поделка инициализируется "как бы нормально", но на самом деле уже должна лечь на этом этапе. А валится на самом использовании (код из примера), потому как AV (не создан экземпляр класса). Во framework 2.x поменялась схема работы: вместо ICorRuntimeHost нужно использовать ICLRRuntimeHost ну и правила работы с этим объектом сессно.
#10
by The gray Cardinal
А что про него надо знать? C:WINDOWSMicrosoft.NETFrameworkv3.0 Могу только повторить услышанную где-то фразу, смысл которой понимаю очень слабо: "третий фреймворк использует рантайм второго" :))
#11
by Gepard
а 1С со ссылками не работает? просто делаю объект, без ошибок, а метод не работает... :(
#12
by Кириллка
по аналогии можно сказать, что "второй фреймворк использует рантайм первого", но как оказалось это не так :) Версию fw получить можно на ура, следовательно, можно разрулить алгоритмы, различных fw.
#13
by Кириллка
кстати, а приведи потенциальные области применения этого добра (только поконкретнее :) ), может я стану заинтересованным.
#17
by The gray Cardinal
Область применения этого добра: использование мощи стандартных классов .NET в языках, которые понимают только COM, например, VBScript, Python, может даже 1С, и т.п. Отсутствие необходимости регистрировать каждую сборку, как показано в нулевом посте, а возможно, и использование классов .NET, которые вообще не спроектированы как видимые через COM. Пример закачки файла для VBScript приведён в нулевом посте. Если удастся задействовать таким способом (через COM) технологию рефлекшн, может, можно вообще чудес наворотить :) Говори яснее, что именно пробовать - тогда попробую.
#18
by Gepard
в библиотека и отчет для семерки, объект создается, но методов не видит... можно ли попробовать в VBScript те же методы?
#24
by The gray Cardinal
Set gp = CreateObject("AddIn.Gepard") Без проблем, но по als'у не вижу, что надо делать дальше. Сейчас посмотрю .
#26
by Gepard
public object ПолучитьОбъект(string DLL, string ТипОбъекта) { ObjectHandle мойОбъект = Activator.CreateInstanceFrom(DLL, ТипОбъекта); object мойОбъект1 = мойОбъект.Unwrap; return мойОбъект1; }
#28
by Gepard
ПулОбъектов = СоздатьОбъект("ПулОбъектов"); Web = ПулОбъектов.ПолучитьОбъект("C:WINDOWSMicrosoft.NETFrameworkv2.0.50727System.dll", "System.Net.WebClient"); Web.DownloadFile("http://www.forum.mista.ru/topic.php","C:123.php");
#29
by The gray Cardinal
И что? :) ПулОбъектов = СоздатьОбъект("ПулОбъектов"); Web = ПулОбъектов.ПолучитьОбъект("C:WINDOWSMicrosoft.NETFrameworkv2.0.50727System.dll", "System.Net.WebClient"); Web.DownloadFile("http://www.forum.mista.ru/topic.php","C:123.php"); Как я это на VBScript сделаю? В als "ПолучитьОбъект" не вижу, да и русские методы в VBScript не покатят.
#33
by Gepard
Код для Set OF= CreateObject("ObjectFerm") Set web = OF.GetObject("C:WINDOWSMicrosoft.NETFrameworkv2.0.50727System.dll", "System.Net.WebClient") web.DownloadFile "http://mysite.com/", "c: empmyfile.htm"
#37
by The gray Cardinal
Спасибо большое, вечером обязательно посмотрю. Сейчас у меня IP-шник для рапиды сильно некузявый :)))
#39
by The gray Cardinal
Неа, не получается... При регистрации: Ошибка при вызове LoadLibrary("clrmonsrv.dll") - Неверная попытка доступа к адресу памяти.
#41
by The gray Cardinal
Посмотрел. Нашёл какую-то dwmapi.dll ("Microsoft Desktop Window Manager API"). Скачал её из инета - всё зарегистрировалось и работает. Потом убрал dwmapi.dll, перерегистрировал сам врапёр - всё опять работает :))) Вчера вечером , однако, пробовал на другой машине (ведь тоже Windows XP) - там чётко было то, о чём я и написал. Вобщем, чудеса (а может, я где-то напортачил, хотя и не пойму, где тут вообще можно напортачить). Вобщем, спасибо большое, пашет!
#45
by The gray Cardinal
Нет. Если честно, то я немного в растерянности :)) Я не совсем понимаю, как работает моникер, потому что например вот такая строка не работает: dm.net:['System.Windows.Forms']System.Windows.Forms.Form "Отсутствует объект, соответствующий специальному имени" И кстати, с какой именно версией .NET это работает в каждом конкретном случае?
#47
by Кириллка
Полез разбираться с моникерами, но попал на один блог и тупо читаю. Читать блог интересно. Кстати, на этом чуть не сошел с ума.
#50
by Кириллка
Судя по коду и описанию моникера, в квадратных скобках должна быть указан сборка (assembly), а потом класс. Эта сборка должна быть в глобальном кеше. Вот у себя в глобальном кеше (C:WINNTassembly) я вижу mscorlib - оно и работает. Может нужно в этом направлении думать?
#51
by The gray Cardinal
У себя в глобальном кеше (C:WINDOWSassembly) я вижу System.Windows.Forms. И тем не менее выдает "Отсутствует объект, соответствующий специальному имени".
#52
by The gray Cardinal
+ Фактически mscorlib находится тут: c:WINDOWSassemblyGAC_32 А вот System.Windows.Forms находится тут: c:WINDOWSassemblyGAC_MSIL Может, моникер ищет только в GAC_32?
#54
by Кириллка
не понятно, где ищет, но используется дотнетовский АПИ: AppDomain.CreateInstance(String, String, Object[]) (точнее его unmanaged эквивалент _AppDomain.CreateInstance) с параметрами: Сборка, Тип, СозданныйОбъект.
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям
Похожие вопросы 1С
В этой группе 1С
- Программно обновить форму открытого документа
- Работа с Макетом построителя отчетов
- Как отправить смс с подменной номера?
- Как выгрузить данные из Паруса в 1с?
- v8: Как в запросе получить месяц прописью?
- Закрытие кассовой смены
- Сертифицированные спецоператоры по передачи электронной отчетности
- ПолеHTMLДокумента
- Как запросом вывести все вышестоящие группы спр.Номенклатура
- Терминальный сервер и несколько ФР
- Шрифты в таблице значений (FONTSET)
- УТ 10.3. Обработки обслуживания ТО. Не могу редактировать код
- Восстановление файла с флешки, перемещенного по F6 в TC
- Сбивается раскладка клавиатуры при подключении к серверу терминалов Windows
- Как настроить расчет НДФЛ в ЗиК?
- Смена цвета интерфейса в 7
- Как узнавать к какому объекту 1С относится данная SQL таблица?
- Как работает функция СводныйОстаток?
- v7: ДО по счету с субконто только количественным учетом
- Поиск и замена дублирующихся елементов справочников в 1С 7.7