Качаем скиллы: создаем и подключаем С# DLL к ZennoPoster

tony11111

Client
Регистрация
29.11.2017
Сообщения
27
Благодарностей
52
Баллы
13
45918


- уровень "игрового мастерства" игрока, навык, умение, мастерство.
В применении Зеннопостера приходит момент, когда начинается активная работа с кодом С#. Сначала мы повторяем один и тот же код, затем копипастим, следующий уровень - своя библиотека сниппетов. Но есть еще один замечательный способ, который позволяет сохранять нужный нам код для многократного использования в наших проектах - DLL библиотеки С#.
DLL библиотека - файл, куда Вы складываете нужные вам методы. Все в одном файле, структурировано, разложено по полочкам (классам), подробно вами прокомментировано, всегда можно отредактировать код методов, подключается в Зеннопостер, как обычная dll'ка.

Создаем свою библиотеку
Для создания библиотеки нам потребуется установленная Visual Studio (VS). Мануалов на эту тему море, самое простое перейти на сайт Microsoft и скачав бесплатную "коммьюнити" версию, установить ее.

Итак, VS установлена, теперь по шагам:

1. Файл --> Создать --> Проект или Ctrl+Shift+N

46047


2. Выбираем Классическое приложение --> Библиотека классов
  • Задаем Имя, например, myFirstZennoDll.
  • Запоминаем Расположение, чтобы легче искать, или выбираем любой удобный нам путь.
  • Жмем "ОК"
46048


Перед нами заготовка для работы:

46052


Теперь для возможности обращения к объектной модели Зеннопостера, нужно добавить ссылки на его библиотеки Dll. Для этого в рабочем окне справа нажимаем на "Обозреватель решений" и в открывшемся окне правым кликом мыши на "Ссылки".

46054


В выпадающем окне нажимаем на "Добавить ссылку".

46055


Откроется окно "Менеджер ссылок".
Жмем на пункт "Обзор" и затем на кнопку "Обзор"

46056


Далее идем в папку с установленным Зеннопостером, например у меня, C:\Program Files\ZennoLab\ZennoPoster Pro\Progs и выбираем следующие файлы:
  1. Global.dll;
  2. ZennoLab.CommandCenter.dll;
  3. ZennoLab.Emulation.dll;
  4. ZennoLab.InterfacesLibrary.dll;
  5. ZennoLab.Macros.dll
После этого обязательно отмечаем выбранные файлы галочками и жмем "ОК"

46057


Теперь, как обычно добавим ссылки на библиотеки в блок "using":

C#:
using ZennoLab.CommandCenter;
using ZennoLab.InterfacesLibrary;
using ZennoLab.InterfacesLibrary.ProjectModel;
using ZennoLab.InterfacesLibrary.ProjectModel.Collections;
using ZennoLab.InterfacesLibrary.ProjectModel.Enums;
using ZennoLab.Macros;
using Global.ZennoExtensions;
using ZennoLab.Emulation;
46058


Белым подсвечены ссылки, которые используются в коде, серые не используются и перед компиляцией их можно удалять. Все ссылки "серые", потому что, пока, не задействованы.

Теперь сделаем что-то полезное, например, добавим в Class1 два метода:

1. Метод "Hi" будет приветствовать нас в логе Зеннопостер;

2. Метод "Hop" будет переходить по ссылке https://zennolab.com/ .

45946


C#:
public string Hi()
        {
            return ("Приветствую!"); // Возвращаем строку
        }

        public void Hop (string strIP = "127.0.0.1", int intPort = 50606, string stringSite = "server")
        {
            ZennoLab.CommandCenter.Instance zennoInstance = new Instance(strIP, intPort, stringSite);
            // Инициализируем инстанс
            Tab Tab1 = zennoInstance.ActiveTab; // Ссылка на вкладку браузера
            Tab1.Navigate("https://zennolab.com/"); // Переход на целевую страницу
            Tab1.WaitDownloading(); // Ожидание загрузки страницы
            return; // Возвращение управления в код
        }
Работа нашей библиотеки в Зеннопостер

Для работы библиотеки нам нужно ее скомпилировать, то есть преобразовать в исполняемый код.
Для этого сохраняем наш проект в VS:

46059


Теперь выбираем или "Сборка" --> "Собрать решение" или "Сборка" --> "Построить ..."

46062

Немного ждем. Все! Наша Dll'ка готова!

Переходим правым кликом по подсвеченной синим вкладке Class1.cs в папку с нашим проектом Dll:

46063


и спускаемся в папку \bin\Debug и здесь находим нашу библиотеку:

46064


Копируем ее в папку Зеннопостера в ExternalAssemblies на вашей машине (C:\Program Files\ZennoLab\RU\ZennoPoster Pro\5.xxx\Progs\ExternalAssemblies).

Подключаем библиотеку в Project Maker, в "Ссылки из GAC":

45954


и добавляем using в общий код:

Посмотреть вложение 45955

Создаем новый проект, добавляем кубик "Свой С# код" и вставляем туда:

C#:
myFirstZennoDll.Class1 Test = new myFirstZennoDll.Class1();
project.SendInfoToLog(Test.Hi());
Test.Hop();
Жмем выполнить. Видим приветствие в логе и открывшуюся страницу Зеннолаба.

Важные замечания:

1. Если проект с добавленной библиотекой открыт в Project Maker или ZP, в Visual Studio нельзя будет сохранить библиотеку. То есть, закрыли PM или ZP, внесли изменения, скомпилировали, снова открыли PM или ZP.

2. Зеннопостер кеширует библиотеку в ExternalAssemblies, поэтому обязательно нужно копировать новую версию библиотеки с заменой.

На этом все!
Открыт новый уровень - создание и подключение своей Dll библиотеки к Зеннопостер.

Понравилась статья - голосуй ЗА!
 
Категория
Полезно
Последнее редактирование:

Zymlex

Moderator
Команда форума
Регистрация
24.10.2016
Сообщения
2 915
Благодарностей
1 487
Баллы
113
закрыли PM или ZP, внесли изменения, скомпилировали, снова открыли PM или ZP.
Можно было бы описать отладку в CodeCreator'e, где такую проблемность можно избежать.
ZennoLab.CommandCenter.Instance zennoInstance = new Instance(strIP, intPort, stringSite);
Лучше получать и передавать имеющийся инстанс.
 

Moadip

Client
Регистрация
26.09.2015
Сообщения
461
Благодарностей
660
Баллы
93
46070


Не назвал бы такое up skill.
Каждый раз создавать объект класса для того чтобы дернуть нужный метод?
Если уж и доносить до новичков в кодинге новое, то сразу закладывать нормальное понимание/базу, чтобы не было говнокода.
Подобные вспомогательные методы делаются через static методы, и еще лучше в static классе в виде методов расширения.

Годная статья на эту тему с одного из прошлого конкурса.
 

tony11111

Client
Регистрация
29.11.2017
Сообщения
27
Благодарностей
52
Баллы
13
Ориентировал статью не на развитие навыков кодирования C#, поэтому примеры куцые, задача рассказать подробно о способе хранения методов и доступа к ним, через Dll библиотеки.
 
  • Спасибо
Реакции: mikluxo

AZANIR

Client
Регистрация
09.06.2014
Сообщения
334
Благодарностей
139
Баллы
43
Статья неплохая , но как по мне мало раскрыла возможности создания библиотеки и ее применения, вернее она раскрыла но куцовато все как-то.
 
  • Спасибо
Реакции: tony11111

tatarin

Client
Регистрация
28.10.2012
Сообщения
738
Благодарностей
113
Баллы
43
А плагины разве не решают эту проблему?
 
  • Спасибо
Реакции: tony11111

tony11111

Client
Регистрация
29.11.2017
Сообщения
27
Благодарностей
52
Баллы
13
@Zymlex,
Хотел описать процесс для тех, кто уже работал в Visual Studio, у нее большие возможности для работы с кодом.

@Moadip,
Спасибо за замечания, конечно, к методу можно обращаться и напрямую, без создания экземпляра объекта.

@AZANIR,
Возможности библиотек действительно очень широкие, можно очень много чего еще написать на эту тему. Цель статьи указать на возможность которая есть, но кто-то о ней не знает.

@tatarin,
Одну и ту же задачу можно решать разными способами, здесь рассказывается именно о библиотеках Dll.
 
  • Спасибо
Реакции: AZANIR

AZANIR

Client
Регистрация
09.06.2014
Сообщения
334
Благодарностей
139
Баллы
43
Вы не оправдывайтесь , вас не осуждают ) , а просто расширяют таким образом взгляд на вашу тему!.
 
  • Спасибо
Реакции: Nike59 и tony11111

tony11111

Client
Регистрация
29.11.2017
Сообщения
27
Благодарностей
52
Баллы
13
Спасибо, понимаю, поэтому и благодарен всем отписывающимся )
 
  • Спасибо
Реакции: frion-seo

radv

Client
Регистрация
11.05.2015
Сообщения
655
Благодарностей
299
Баллы
63
Использование dll в своих проектах очень облегчает написание кода, можно также выносить блоки кода в свои кубики/плагины (начиная с версии 5.20) и использовать их.
 
  • Спасибо
Реакции: tony11111

mikluxo

Client
Регистрация
14.12.2019
Сообщения
1
Благодарностей
1
Баллы
3
Друг, ты красавчег. Весь день угрохал на то чтобы запустить свою длл в зенке. Твой пример сразу завелся, оказалось что dll у меня .net core была. Далее танцы с бубнами возникли при добавлении своего кода. Зенка код видит - но ругается страшным матом. В общем пришлось подписать плагин и через gacutil добавить, только тогда заработало.
 
  • Спасибо
Реакции: tony11111

radv

Client
Регистрация
11.05.2015
Сообщения
655
Благодарностей
299
Баллы
63
Небольшой нюанс. При создании своих dll с целью использования их в зеннопостер, версия NetFramework должна быть не выше 4.5.2, иначе возможен конфликт версий и ошибки в зеннопостер, пока там не повысят версию C#.
 
  • Спасибо
Реакции: Zedx, Manfred и tony11111

Viking01

Client
Регистрация
19.08.2017
Сообщения
62
Благодарностей
11
Баллы
8
Небольшой нюанс. При создании своих dll с целью использования их в зеннопостер, версия NetFramework должна быть не выше 4.5.2, иначе возможен конфликт версий и ошибки в зеннопостер, пока там не повысят версию C#.
на zp5.39 запустилась с 4.6.1))
 
  • Спасибо
Реакции: tony11111

tony11111

Client
Регистрация
29.11.2017
Сообщения
27
Благодарностей
52
Баллы
13
Разработчики Зеннопостера не даром свой хлеб едят )
 

Metrix

Client
Регистрация
03.01.2014
Сообщения
264
Благодарностей
202
Баллы
43
Техническая статья - всегда хорошо, тем более, что скиллованные коллеги обратили внимание на некоторые упущения в коде. Спасибо.

@radv @Viking01 всё дело в том, фичи из какой версии языка используются в библиотеке. Фреймворк 4.6.1 говорит о максимально возможной версии 6.0 C#, но если там нет методов из этой версии языка, а по факту 5.0 и ниже, значит с запуском в Зеннопостер проблем быть не должно.
 
  • Спасибо
Реакции: tony11111

Zymlex

Moderator
Команда форума
Регистрация
24.10.2016
Сообщения
2 915
Благодарностей
1 487
Баллы
113
@Zymlex,
Хотел описать процесс для тех, кто уже работал в Visual Studio, у нее большие возможности для работы с кодом.
Так работу в сторонней IDE я и подразумевал, но перенос в PM - это гемор.
на zp5.39 запустилась с 4.6.1))
Можно сразу на 4.8 рабочие сборки делать.
Тут ещё стоит дополнить, что мало кто знает про Dispose и потом удивляются, почему постер память отжирает.
 

Zymlex

Moderator
Команда форума
Регистрация
24.10.2016
Сообщения
2 915
Благодарностей
1 487
Баллы
113

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)