Как заставить работать "project" в общем коде?

ibred

Client
Регистрация
04.04.2015
Сообщения
3 835
Благодарностей
3 542
Баллы
113
Понял, что у меня проекте много C# кубиков одинакового содержания, которые я периодически допиливаю и приходится менять код во всех, неудобно. Подумал вынести всё это в общий код и вызывать функцией, но у меня валится ошибка:
Компиляция кода проекта Ошибка при компиляции общего кода "CS0103" "Имя "project" отсутствует в текущем контексте".
Как использовать
  • project.Variables["name"].Value;
  • project.SendInfoToLog("text");
и другое из общего кода и возможно ли это?
 

amyboose

Client
Регистрация
21.04.2016
Сообщения
2 312
Благодарностей
1 191
Баллы
113
Вызывай из полного пути наподобие ZennoLab.Zennoposter.project или что-то наподобие этого (загружать проект мейкер лень чтобы сказать как точно путь выглядит) или добавляй директиву using свою, чтобы сократить этот путь.
 

ibred

Client
Регистрация
04.04.2015
Сообщения
3 835
Благодарностей
3 542
Баллы
113
Вызывай из полного пути наподобие ZennoLab.Zennoposter.project или что-то наподобие этого (загружать проект мейкер лень чтобы сказать как точно путь выглядит) или добавляй директиву using свою, чтобы сократить этот путь.
Посмотри, пожалуйста, как будет время. Не могу подобрать путь.
 

amyboose

Client
Регистрация
21.04.2016
Сообщения
2 312
Благодарностей
1 191
Баллы
113

ibred

Client
Регистрация
04.04.2015
Сообщения
3 835
Благодарностей
3 542
Баллы
113
Так набери ZennoLab. и затем найди через intellisearch, там вроде не так много вариантов.
Все перечисленное из этого списка уже указано через using. Напиши точно, пожалуйста, уже час потратил на эту хурму.
2016-10-22_23-47-28.png
 

amyboose

Client
Регистрация
21.04.2016
Сообщения
2 312
Благодарностей
1 191
Баллы
113
Объект project находится в классе, который реализует интерфейс ZennoLab.InterfacesLibrary.ProjectModel.IZennoPosterProjectModel, но как подступиться к нему напрямую не нашел. Скорее всего project является приватным, а кубики C# являются методами, вызываемыми из того класса, наследующего интерфейс и поэтому вызов возможен только из кубиков.
 
Последнее редактирование:

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 379
Благодарностей
2 039
Баллы
113
Понял, что у меня проекте много C# кубиков одинакового содержания, которые я периодически допиливаю и приходится менять код во всех, неудобно. Подумал вынести всё это в общий код и вызывать функцией, но у меня валится ошибка:


Как использовать
  • project.Variables["name"].Value;
  • project.SendInfoToLog("text");
и другое из общего кода и возможно ли это?
2016-10-23_140944.png
 
  • Спасибо
Реакции: arhip1985 и evgen2208

z@jivalo

Client
Регистрация
27.12.2016
Сообщения
798
Благодарностей
178
Баллы
43
ssXXXss
разработчики не вносили изменений в новые версии ?
а то этот способ у меня не работает


или есть другой способ получить значение из общей переменной ?
 

Dr.Pipetka

Client
Регистрация
12.12.2017
Сообщения
1 234
Благодарностей
804
Баллы
113
Вроде оно

В общий код:
Код:
 public class my
    {
        /// <summary>
        /// Lock this object to mark part of code for single thread execution
        /// </summary>
        public static object SyncObject = new object();
        public static IZennoPosterProjectModel project;
        public static Instance instance;
в кубик:

Код:
my.project = project;
my.instance = instance;
 
  • Спасибо
Реакции: ZennoCat

z@jivalo

Client
Регистрация
27.12.2016
Сообщения
798
Благодарностей
178
Баллы
43

radv

Client
Регистрация
11.05.2015
Сообщения
3 677
Благодарностей
1 859
Баллы
113
Прописываю в общем коде
public static object SyncObject = new object();
public static IZennoPosterProjectModel project;
public static Instance instance;

без них выдает ошибку типа:
Код:
Компиляция кода проекта Ошибка при компиляции общего кода "CS0103" "Имя "project" отсутствует в текущем контексте"
А с ними тоже не хочет работать.

На каждой строке кода, где есть project или instance выдает ошибку


Как сделать, чтобы работало без ошибок?

Если закомментить все упоминания project и instance, то все работает как надо. Версия зенки 5.21.1
 

Dr.Pipetka

Client
Регистрация
12.12.2017
Сообщения
1 234
Благодарностей
804
Баллы
113
Общий код:
Код:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.IO;
using System.Text.RegularExpressions;
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;

namespace ZennoLab.OwnCode
{
    /// <summary>
    /// A simple class of the common code
    /// </summary>
    public class CommonCode
    {
        /// <summary>
        /// Lock this object to mark part of code for single thread execution
        /// </summary>
        public static object SyncObject = new object();
        public static IZennoPosterProjectModel project;
        public static Instance instance;
        // Insert your code here
        public static void CurProxy()
        {
            Global.SpecialForms.AlertNotificator.Instance.DisplayAlert("Текущий прокси ",project.Variables["proxy"].Value);
        }
    }
}
Кубик из которого вызываем:
Код:
var tab = instance.ActiveTab;
CommonCode.project = project;
CommonCode.instance = instance;
CommonCode.CurProxy();
В проекте должны присутствовать переменная:

upload_2018-8-28_9-19-9.png
 

doc

Client
Регистрация
30.03.2012
Сообщения
8 607
Благодарностей
4 598
Баллы
113
Общий код:
Код:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.IO;
using System.Text.RegularExpressions;
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;

namespace ZennoLab.OwnCode
{
    /// <summary>
    /// A simple class of the common code
    /// </summary>
    public class CommonCode
    {
        /// <summary>
        /// Lock this object to mark part of code for single thread execution
        /// </summary>
        public static object SyncObject = new object();
        public static IZennoPosterProjectModel project;
        public static Instance instance;
        // Insert your code here
        public static void CurProxy()
        {
            Global.SpecialForms.AlertNotificator.Instance.DisplayAlert("Текущий прокси ",project.Variables["proxy"].Value);
        }
    }
}
Кубик из которого вызываем:
Код:
var tab = instance.ActiveTab;
CommonCode.project = project;
CommonCode.instance = instance;
CommonCode.CurProxy();
В проекте должны присутствовать переменная:

Посмотреть вложение 31613
Прописываю в общем коде
public static object SyncObject = new object();
public static IZennoPosterProjectModel project;
public static Instance instance;

без них выдает ошибку типа:
Код:
Компиляция кода проекта Ошибка при компиляции общего кода "CS0103" "Имя "project" отсутствует в текущем контексте"
А с ними тоже не хочет работать.

На каждой строке кода, где есть project или instance выдает ошибку


Как сделать, чтобы работало без ошибок?

Если закомментить все упоминания project и instance, то все работает как надо. Версия зенки 5.21.1
Статические переменные будут общие для всех потоков. Не надо так
 

radv

Client
Регистрация
11.05.2015
Сообщения
3 677
Благодарностей
1 859
Баллы
113

doc

Client
Регистрация
30.03.2012
Сообщения
8 607
Благодарностей
4 598
Баллы
113

radv

Client
Регистрация
11.05.2015
Сообщения
3 677
Благодарностей
1 859
Баллы
113
Чтобы без ошибок было ) Работа с объектами project и instance в общем коде. А то ни информацию в лог не вывести, ни локальные переменные проекта не взять. Постоянно ошибки вылезают. В кубике все без ошибок работает.
 

arhip1985

Client
Регистрация
31.10.2011
Сообщения
2 955
Благодарностей
781
Баллы
113
выше ссикссс приводил пример - Если у Вас в общем коде есть метод, который будет работать проджектом или инстансом - то Вы должны передать этому методу проджект и внутри метода присвоить ваш проджект переменной и работать с этой переменной как с проджектом в кубике
 

Adigen

Client
Регистрация
28.07.2014
Сообщения
825
Благодарностей
651
Баллы
93
Чтобы без ошибок было ) Работа с объектами project и instance в общем коде. А то ни информацию в лог не вывести, ни локальные переменные проекта не взять. Постоянно ошибки вылезают. В кубике все без ошибок работает.
Передавайте project и instance параметрами в методы при вызове.
 

doc

Client
Регистрация
30.03.2012
Сообщения
8 607
Благодарностей
4 598
Баллы
113
Если мы говорим о методах
C#:
public static string GetPrDir(IZennoPosterProjectModel project)
{
    return project.Directory;
}

public static string GetDom(Instance instance)
{
    return instance.ActiveTab.DomText;
}
Ну а реализация с объектом класса есть выше, код двухгодичной давности
 
  • Спасибо
Реакции: indus

Dr.Pipetka

Client
Регистрация
12.12.2017
Сообщения
1 234
Благодарностей
804
Баллы
113
Спросили как, я показал:-)
 

radv

Client
Регистрация
11.05.2015
Сообщения
3 677
Благодарностей
1 859
Баллы
113
Всем спасибо, разобрался :az:
 

Porosenok

Client
Регистрация
26.09.2010
Сообщения
1 279
Благодарностей
96
Баллы
48
Тоже столкнулся с подобной проблемой, сделал как тут предлагалось. Шаб стал запускаться, но когда запускаю кубик с функцией из общего кода то ошибка
Вот мой общий код
Код:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.IO;
using System.Text.RegularExpressions;
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;

namespace ZennoLab.OwnCode
{
    /// <summary>
    /// A simple class of the common code
    /// </summary>
    public class CommonCode
    {
        /// <summary>
        /// Lock this object to mark part of code for single thread execution
        /// </summary>
        public static object SyncObject = new object();

        //Локеры для списков
        public static object LockMailAkk = new object();//блокируем файл с аккаунтами почты
        public static object LockProxyStr = new object();//блокируем файл с прокси
        public static object LockPhotoPath = new object();//блокируем файл с путями к фотографиям
         public class my
    {
        /// <summary>
        /// Lock this object to mark part of code for single thread execution
        /// </summary>
        public static object SyncObject = new object();
        public static IZennoPosterProjectModel project;
        public static Instance instance;
    }
        public static void BanCheck() {
           
        //Проверка на чекпоинт и капчу
    string captchaCheck = my.instance.ActiveTab.FindElementByXPath(".//*/input[contains(@id, 'captcha_response')]", 0).GetAttribute("width");
    string recaptchaCheck = my.instance.ActiveTab.FindElementByXPath(".//*/label[contains(@id, 'recaptcha-anchor-label')]", 0).GetAttribute("width");
    bool check = my.instance.ActiveTab.URL.Contains("https://url.com/");
    if (check == true) {

    throw new Exception("Аккаунт вылетел на чекпоинт либо ошибка");
    }
    if (captchaCheck != "0" && captchaCheck != "")
    {
        throw new Exception("Аккаунт вылетел на капчу");
    }
    if (recaptchaCheck != "0" && recaptchaCheck != "")
    {
        throw new Exception("Аккаунт вылетел на рекапчу");
    }   
        }
       

    }
}
А вот как я его вызываю в кубике и какая ошибка


Как сделать чтобы все нормально было?
 

Adigen

Client
Регистрация
28.07.2014
Сообщения
825
Благодарностей
651
Баллы
93
Тоже столкнулся с подобной проблемой, сделал как тут предлагалось. Шаб стал запускаться, но когда запускаю кубик с функцией из общего кода то ошибка
Вот мой общий код
Код:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.IO;
using System.Text.RegularExpressions;
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;

namespace ZennoLab.OwnCode
{
    /// <summary>
    /// A simple class of the common code
    /// </summary>
    public class CommonCode
    {
        /// <summary>
        /// Lock this object to mark part of code for single thread execution
        /// </summary>
        public static object SyncObject = new object();

        //Локеры для списков
        public static object LockMailAkk = new object();//блокируем файл с аккаунтами почты
        public static object LockProxyStr = new object();//блокируем файл с прокси
        public static object LockPhotoPath = new object();//блокируем файл с путями к фотографиям
         public class my
    {
        /// <summary>
        /// Lock this object to mark part of code for single thread execution
        /// </summary>
        public static object SyncObject = new object();
        public static IZennoPosterProjectModel project;
        public static Instance instance;
    }
        public static void BanCheck() {
         
        //Проверка на чекпоинт и капчу
    string captchaCheck = my.instance.ActiveTab.FindElementByXPath(".//*/input[contains(@id, 'captcha_response')]", 0).GetAttribute("width");
    string recaptchaCheck = my.instance.ActiveTab.FindElementByXPath(".//*/label[contains(@id, 'recaptcha-anchor-label')]", 0).GetAttribute("width");
    bool check = my.instance.ActiveTab.URL.Contains("https://url.com/");
    if (check == true) {

    throw new Exception("Аккаунт вылетел на чекпоинт либо ошибка");
    }
    if (captchaCheck != "0" && captchaCheck != "")
    {
        throw new Exception("Аккаунт вылетел на капчу");
    }
    if (recaptchaCheck != "0" && recaptchaCheck != "")
    {
        throw new Exception("Аккаунт вылетел на рекапчу");
    } 
        }
     

    }
}
А вот как я его вызываю в кубике и какая ошибка


Как сделать чтобы все нормально было?
Оно и не должно работать, т.к. вы не присваиваете значения для ZennoLab.OwnCode.my.project и ZennoLab.OwnCode.my.instance
Если присвоите заработает, но только в ОДИН поток, для многопотока такой изврат не предназначен.
 

Porosenok

Client
Регистрация
26.09.2010
Сообщения
1 279
Благодарностей
96
Баллы
48
Оно и не должно работать, т.к. вы не присваиваете значения для ZennoLab.OwnCode.my.project и ZennoLab.OwnCode.my.instance
Если присвоите заработает, но только в ОДИН поток, для многопотока такой изврат не предназначен.
а как надо сделать чтобы в многопотоке работало?
 

arhip1985

Client
Регистрация
31.10.2011
Сообщения
2 955
Благодарностей
781
Баллы
113
вы не создали объект класса my , надо либо его сделать статическим - либо создавать в кубике объект класса и на нём вызывать функцию
в общем коде не обязательно локкеры добавлять. вы можете залочить фашу функцию внутри кубика готовым локкером зенновским
 

arhip1985

Client
Регистрация
31.10.2011
Сообщения
2 955
Благодарностей
781
Баллы
113
посмотрите как ssxxxss нарисовал код - проджект или инстанс - вы должны передавать параметрами либо в конструктор класса либо в Ваш метод
 

surrealmix

Client
Регистрация
07.03.2013
Сообщения
715
Благодарностей
409
Баллы
63

arhip1985

Client
Регистрация
31.10.2011
Сообщения
2 955
Благодарностей
781
Баллы
113

arhip1985

Client
Регистрация
31.10.2011
Сообщения
2 955
Благодарностей
781
Баллы
113

caiman

Новичок
Регистрация
13.01.2018
Сообщения
13
Благодарностей
4
Баллы
3
Камрады, подскажите нубу такую вещь:
сразу оговорюсь, что только учусь, С# для меня пока непознанный лес.
с горем пополам сделал вот такую конструкцию для работы с общим кодом:
https://drive.google.com/open?id=1LDi12Gp8V8b_tkHlTpAFvrpH2B7X12bC
будет ли такой код работать в многопотоке?

и сразу такой вопрос а как вычленить имя списка, например что бы высвечивать в логе какой список чистим?
 

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