Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Реализация вспомогательного скриптового языка (C#), По типу скриптового с объектами 
:(
    Опции темы
Softaz
Дата 27.5.2006, 10:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


wasm
**


Профиль
Группа: Участник
Сообщений: 373
Регистрация: 16.1.2006

Репутация: 3
Всего: 16



Подскажите пожалуйста как сделать некое подобие скриптового языка для программы.

1. Допустим, в программе есть блок расчетов некоего параметра (параметров), которые представлены, скажем int[] с определенным количеством членов

2. Этот, с позволения сказать, массив поступает в "черный ящик" (за логику которого отвечает создаваемый скриптовый язык) и на выходе имеем рассчитанный блок int[] с каким-либо определенным количеством членов.

3. Этот рассчитанный массив используется программой для дальнейших расчетов.

Так вот на шаге 2 я застрял.
Знаю, что можно и очень просто, но не понял как делать следующее:

(парсинг текста в сторону -- здесь все понятно)
Допустим, у нас входящий  int[] = InInt {1,2}
Теперь передаем его в "черный ящик".

Код

/*
//нужно определять локальные переменные
(MyInt - тип в скрипт-языке, переводящийся в int после парсинга)
Как сделать, чтобы и в том участке программы добавилась переменная MyInt типа int?
*/
MyInt add 4;
// .......
/*
После расчетов присваеваем выходному
массиву(OutInt[]), поступающему в программу (шаг 3)
нужные значения
*/
OutInt[0] = add + InInt[0];
OutInt[1] = add + InInt[1];


То есть на шаге 1 мы передали в обработчик скрипт-языка два значения типа int: 1 и 2
А на выходе получили увеличенные на 4: 5 и 6 соответсвенно.

При этом созданные в скрипт-языке переменные должны быть видимы в программе.

Добавлено @ 10:32 
Напишу понятней, что я не просек, как делать.

Допустим, в проекте есть класс-форма с именем frm_custom

В скрипт-коде (обычный TextBox) пишем.

Код

frm_custom frm_c = new frm_custom();
frm_c.Show();


Потом парсим.
Узнаю, что в коде вызывается класс frm_custom, дается имя frm_c и вызывается метод Show().

Теперь как эти объекты в программе (класс frm_custom есть, его надо вызывать) реализовать.  

Это сообщение отредактировал(а) Softaz - 27.5.2006, 10:39


--------------------
Разочарованный в .NET
PM MAIL WWW   Вверх
mr.DUDA
Дата 27.5.2006, 12:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Нужно зная имя класса, создать экземпляр и дёрнуть метод ? Если да, то Activator.CreateInstance в помощь. Метод по имени получаем с пом. myType.GetMethod("Show").Invoke(objectInstance, null). 


--------------------
user posted image
PM MAIL WWW   Вверх
Softaz
Дата 27.5.2006, 18:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


wasm
**


Профиль
Группа: Участник
Сообщений: 373
Регистрация: 16.1.2006

Репутация: 3
Всего: 16



mr.DUDA, спасибо. Получилось.

Код

        private void button1_Click(object sender, EventArgs e)
        {
            MyClass MyObject = new MyClass();

            // Get the type of MyClass.
            Type myType = MyObject.GetType();

            object[] obj = new object[1];
            obj.SetValue("Текст", 0);

            // Get the method information for MyFunction. 
            myType.GetMethod("MyFunction").Invoke(null, obj);
        }
    }


     class  MyClass
    {
        public int myInt = 0;
        public string myString = null;
         public MyClass()
         {
         }
        public static void MyFunction(string text)
        {
            MessageBox.Show(text);
        }
    }

 


--------------------
Разочарованный в .NET
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0992 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.