Ole 1c EvalExpr
От: Student17  
Дата: 13.07.09 10:52
Оценка:
Здраствуйте.

label1.Text = "Режим подключения к 1с";
                    V7 = Activator.CreateInstance(Type.GetTypeFromProgID("V77.Application"));
                    Object[] arg = new Object[3];
                    arg[0] = V7.GetType().InvokeMember("RMTrade", BindingFlags.Public | BindingFlags.InvokeMethod, null, V7, null);
                    arg[1] = @"/dD:\zbase\База /nOr /p32 ";
                    arg[2] = @"NO_SPLASH_SHOW";
                    bool result = (Boolean)V7.GetType().InvokeMember(@"Initialize", BindingFlags.Public | BindingFlags.InvokeMethod, null, V7, arg);
                    if (!result)
                    {
                        label1.Text = "соединение с 1с отсутствуит";
                    V7 = null;
                    GC.Collect();
                    GC.WaitForPendingFinalizers();
                    }
                    else
                    {
                        label1.Text = "соединение  к 1с установлено";
                        arg = new Object[1];
                        arg[0] = "глПолучить1("+line_z+")";
                        Result = V7.GetType().InvokeMember("EvalExpr", BindingFlags.Public | BindingFlags.InvokeMethod, null, V7, arg).ToString(); 
                    }
                    label1.Text = "закрываем соединение к 1с";
                    V7 = null;
                    GC.Collect();
                    GC.WaitForPendingFinalizers();

В этом коде я пытаюсь запустить в 1с функцию и передать в неё параметр. так вот не получеться передать параметр. Подскажите как правильно мне это сделать?
пробовал писать вот так и все работает.

arg = new Object[1];
arg[0] = @"глПолучить1(""1"")";

В 1с функция просто возврашает переданое в неё значение.
Блогадарен за внимание.
й
Re: Ole 1c EvalExpr
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 13.07.09 11:06
Оценка:
Здравствуйте, Student17, Вы писали:

Вызывай глобальную функцию напрямую без EvalExpr
и солнце б утром не вставало, когда бы не было меня
Re: Ole 1c EvalExpr
От: Львёнок Россия  
Дата: 13.07.09 11:06
Оценка:
Здравствуйте, Student17, Вы писали:

S>Здраствуйте.


S>
S>label1.Text = "Режим подключения к 1с";
S>                    V7 = Activator.CreateInstance(Type.GetTypeFromProgID("V77.Application"));
S>                    Object[] arg = new Object[3];
S>                    arg[0] = V7.GetType().InvokeMember("RMTrade", BindingFlags.Public | BindingFlags.InvokeMethod, null, V7, null);
S>                    arg[1] = @"/dD:\zbase\База /nOr /p32 ";
S>                    arg[2] = @"NO_SPLASH_SHOW";
S>                    bool result = (Boolean)V7.GetType().InvokeMember(@"Initialize", BindingFlags.Public | BindingFlags.InvokeMethod, null, V7, arg);
S>                    if (!result)
S>                    {
S>                        label1.Text = "соединение с 1с отсутствуит";
S>                    V7 = null;
S>                    GC.Collect();
S>                    GC.WaitForPendingFinalizers();
S>                    }
S>                    else
S>                    {
S>                        label1.Text = "соединение  к 1с установлено";
S>                        arg = new Object[1];
S>                        arg[0] = "глПолучить1("+line_z+")";

                        arg[0] = "глПолучить1(\""+line_z+"\")";
                                              ^^          ^^

Так не лучше ли будет?
S>                        Result = V7.GetType().InvokeMember("EvalExpr", BindingFlags.Public | BindingFlags.InvokeMethod, null, V7, arg).ToString(); 
S>                    }
S>                    label1.Text = "закрываем соединение к 1с";
S>                    V7 = null;
S>                    GC.Collect();
S>                    GC.WaitForPendingFinalizers();

S>В этом коде я пытаюсь запустить в 1с функцию и передать в неё параметр. так вот не получеться передать параметр. Подскажите как правильно мне это сделать?
S>пробовал писать вот так и все работает.
... << RSDN@Home 1.2.0 alpha 4 rev. 1233>>
Re: Ole 1c EvalExpr
От: Пельмешко Россия blog
Дата: 13.07.09 11:13
Оценка:
Здравствуйте, Student17, Вы писали:

S>Здраствуйте.

Здраствуйте!

S>пробовал писать вот так и все работает.

arg = new Object[1];
arg[0] = @"глПолучить1(""1"")";

Может тогда так?
arg[0] = "глПолучить1(\""+line_z+"\")";

Оффтоп
Боже ж мой:
V7 = null;
GC.Collect();
GC.WaitForPendingFinalizers();
Неужели без этого не обойтись?
И это... Клёвые у вас клиенты, раз успевают успевают увидеть "соединение с 1с отсутствуит" за время сборки мусора...
Re[2]: Ole 1c EvalExpr
От: Student17  
Дата: 13.07.09 11:13
Оценка:
Львёнок,Serginio1 спасибо вам за внимание. получилось все. Будит ли разница если вызывать функцию на прямую? если есть то какая?
Re[3]: Ole 1c EvalExpr
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 13.07.09 11:16
Оценка:
Здравствуйте, Student17, Вы писали:

S>Львёнок,Serginio1 спасибо вам за внимание. получилось все. Будит ли разница если вызывать функцию на прямую? если есть то какая?

Да особо никакой. Все равно тормоза. Просто вызов как функции или метода удобней.
Посмотри кстати http://www.forum.mista.ru/topic.php?id=419405
Вконце
и солнце б утром не вставало, когда бы не было меня
Re[3]: Ole 1c EvalExpr
От: Львёнок Россия  
Дата: 13.07.09 11:19
Оценка:
Здравствуйте, Student17, Вы писали:

S>Львёнок,Serginio1 спасибо вам за внимание. получилось все. Будит ли разница если вызывать функцию на прямую? если есть то какая?


Только одна мысль — зачем наворачивать EvalExpr вокруг функции, которую можно вызвать непосредственно.
Ну и соответственно как минимум — дополнительная задержка вызова функции через Eval, хотя для com соединения с 77 не думаю, что это имеет принципиальное значение
... << RSDN@Home 1.2.0 alpha 4 rev. 1233>>
Re[2]: Ole 1c EvalExpr
От: Student17  
Дата: 13.07.09 11:21
Оценка:
Здравствуйте, Пельмешко, Вы писали:

П>Здравствуйте, Student17, Вы писали:


S>>Здраствуйте.

П>Здраствуйте!

S>>пробовал писать вот так и все работает.

П>
П>arg = new Object[1];
П>arg[0] = @"глПолучить1(""1"")";
П>

П>Может тогда так?
П>
П>arg[0] = "глПолучить1(\""+line_z+"\")";
П>

П>Оффтоп
П>Боже ж мой:
П>
П>V7 = null;
П>GC.Collect();
П>GC.WaitForPendingFinalizers();
П>
Неужели без этого не обойтись?

П>И это... Клёвые у вас клиенты, раз успевают успевают увидеть "соединение с 1с отсутствуит" за время сборки мусора...
Без чего не обойтись?
"соединение с 1с отсутствуит"-это я писал для себя когда разбералься с соединением
Re[3]: Ole 1c EvalExpr
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 13.07.09 11:27
Оценка: 7 (2)
Здравствуйте, Student17, Вы писали:

S>Без чего не обойтись?

S>"соединение с 1с отсутствуит"-это я писал для себя когда разбералься с соединением
Релизь ком объекты прямо
Marshal.ReleaseComObject(v7);
v7 = null;
и солнце б утром не вставало, когда бы не было меня
Re[4]: Ole 1c EvalExpr
От: Student17  
Дата: 13.07.09 11:30
Оценка:
От: Львёнок

Лё>Только одна мысль — зачем наворачивать EvalExpr вокруг функции, которую можно вызвать непосредственно.

Лё>Ну и соответственно как минимум — дополнительная задержка вызова функции через Eval, хотя для com соединения с 77 не думаю, что это имеет принципиальное значение
От: Serginio1

S>Да особо никакой. Все равно тормоза. Просто вызов как функции или метода удобней.

S>Посмотри кстати http://www.forum.mista.ru/topic.php?id=419405
Неопсредственно или напрямую это как ?
Не совсем понял.
Если вас не затруднит можно примерчик.
Чтото пыталься сделать. Чет не то написал.
Result = V7.GetType().InvokeMember("глПолучить1", BindingFlags.Public | BindingFlags.InvokeMethod, null, V7, arg);
Re[4]: Ole 1c EvalExpr
От: Student17  
Дата: 13.07.09 11:32
Оценка:
Здравствуйте, Serginio1, Вы писали:

S>Здравствуйте, Student17, Вы писали:


S>>Без чего не обойтись?

S>>"соединение с 1с отсутствуит"-это я писал для себя когда разбералься с соединением
S>Релизь ком объекты прямо
S>Marshal.ReleaseComObject(v7);
S>v7 = null;
Разве в 7.7 есть com? вроде только OLE
Re[5]: Ole 1c EvalExpr
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 13.07.09 11:35
Оценка:
Здравствуйте, Student17, Вы писали:

S>Здравствуйте, Serginio1, Вы писали:


S>>Здравствуйте, Student17, Вы писали:


S>>>Без чего не обойтись?

S>>>"соединение с 1с отсутствуит"-это я писал для себя когда разбералься с соединением
S>>Релизь ком объекты прямо
S>>Marshal.ReleaseComObject(v7);
S>>v7 = null;
S>Разве в 7.7 есть com? вроде только OLE
Ole это IDispath, кторый наследует методы IUnknow
AddRef() Release() и QueryInterface().
и солнце б утром не вставало, когда бы не было меня
Re[6]: Ole 1c EvalExpr
От: Student17  
Дата: 13.07.09 11:38
Оценка:
чет я запуталься с ветками сообшения.
От: Львёнок

Лё>Только одна мысль — зачем наворачивать EvalExpr вокруг функции, которую можно вызвать непосредственно.

Лё>Ну и соответственно как минимум — дополнительная задержка вызова функции через Eval, хотя для com соединения с 77 не думаю, что это имеет принципиальное значение
От: Serginio1

S>Да особо никакой. Все равно тормоза. Просто вызов как функции или метода удобней.

S>Посмотри кстати http://www.forum.mista.ru/topic.php?id=419405
Неопсредственно или напрямую это как ?
Не совсем понял.
Если вас не затруднит можно примерчик.
Чтото пыталься сделать. Чет не то написал.

Result = V7.GetType().InvokeMember("глПолучить1", BindingFlags.Public | BindingFlags.InvokeMethod, null, V7, arg);
Re[5]: Ole 1c EvalExpr
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 13.07.09 11:39
Оценка:
Здравствуйте, Student17, Вы писали:
Тот кто программирует на Delphi бейсике или 1С незадумываются о подсчете ссылок с олевариантами, т.к. там Addref вызывается при присвоение , а Release к старому объекту при присвоениии или при выходе из видимости
и солнце б утром не вставало, когда бы не было меня
Re: Ole 1c EvalExpr
От: Student17  
Дата: 13.07.09 11:43
Оценка:
Блогадорю всех. Спасибо за внимание.
Re[7]: Ole 1c EvalExpr
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 13.07.09 11:44
Оценка:
Здравствуйте, Student17, Вы писали:

Когда ты присваиваешь null, объект не релизится, это произойдет только при сборке мусора и подсчете ссылок на объекты.
Поэтому лучше зарелизить заранее и чем релизить достаточно накладной сборкой мусора
и солнце б утром не вставало, когда бы не было меня
Re[8]: Ole 1c EvalExpr
От: Student17  
Дата: 13.07.09 11:56
Оценка:
Здравствуйте, Serginio1, Вы писали:

S>Здравствуйте, Student17, Вы писали:


S>Когда ты присваиваешь null, объект не релизится, это произойдет только при сборке мусора и подсчете ссылок на объекты.

S>Поэтому лучше зарелизить заранее и чем релизить достаточно накладной сборкой мусора

Понял спасибо. Это пригодиться.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.