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с функция просто возврашает переданое в неё значение.
Блогадарен за внимание.
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>пробовал писать вот так и все работает.
Здравствуйте, Student17, Вы писали:
S>Львёнок,Serginio1 спасибо вам за внимание. получилось все. Будит ли разница если вызывать функцию на прямую? если есть то какая?
Да особо никакой. Все равно тормоза. Просто вызов как функции или метода удобней.
Посмотри кстати http://www.forum.mista.ru/topic.php?id=419405
Вконце
и солнце б утром не вставало, когда бы не было меня
Здравствуйте, Student17, Вы писали:
S>Львёнок,Serginio1 спасибо вам за внимание. получилось все. Будит ли разница если вызывать функцию на прямую? если есть то какая?
Только одна мысль — зачем наворачивать EvalExpr вокруг функции, которую можно вызвать непосредственно.
Ну и соответственно как минимум — дополнительная задержка вызова функции через Eval, хотя для com соединения с 77 не думаю, что это имеет принципиальное значение
Неужели без этого не обойтись? П>И это... Клёвые у вас клиенты, раз успевают успевают увидеть "соединение с 1с отсутствуит" за время сборки мусора...
Без чего не обойтись?
"соединение с 1с отсутствуит"-это я писал для себя когда разбералься с соединением
Здравствуйте, Student17, Вы писали:
S>Без чего не обойтись? S>"соединение с 1с отсутствуит"-это я писал для себя когда разбералься с соединением
Релизь ком объекты прямо
Marshal.ReleaseComObject(v7);
v7 = null;
и солнце б утром не вставало, когда бы не было меня
От: Львёнок
Лё>Только одна мысль — зачем наворачивать 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);
Здравствуйте, Serginio1, Вы писали:
S>Здравствуйте, Student17, Вы писали:
S>>Без чего не обойтись? S>>"соединение с 1с отсутствуит"-это я писал для себя когда разбералься с соединением S>Релизь ком объекты прямо S>Marshal.ReleaseComObject(v7); S>v7 = null;
Разве в 7.7 есть com? вроде только OLE
Здравствуйте, 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().
и солнце б утром не вставало, когда бы не было меня
чет я запуталься с ветками сообшения.
От: Львёнок
Лё>Только одна мысль — зачем наворачивать 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);
Здравствуйте, Student17, Вы писали:
Тот кто программирует на Delphi бейсике или 1С незадумываются о подсчете ссылок с олевариантами, т.к. там Addref вызывается при присвоение , а Release к старому объекту при присвоениии или при выходе из видимости
и солнце б утром не вставало, когда бы не было меня
Когда ты присваиваешь null, объект не релизится, это произойдет только при сборке мусора и подсчете ссылок на объекты.
Поэтому лучше зарелизить заранее и чем релизить достаточно накладной сборкой мусора
и солнце б утром не вставало, когда бы не было меня
Здравствуйте, Serginio1, Вы писали:
S>Здравствуйте, Student17, Вы писали:
S>Когда ты присваиваешь null, объект не релизится, это произойдет только при сборке мусора и подсчете ссылок на объекты. S>Поэтому лучше зарелизить заранее и чем релизить достаточно накладной сборкой мусора