и солнце б утром не вставало, когда бы не было меня
Здравствуйте, ablazhko, Вы писали:
A>object [] arg1 = new object[] {"ProcessCountriesList()"};
A> lateBoundType.InvokeMember("EvalExpr", BindingFlags.Public | BindingFlags.InvokeMethod | BindingFlags.Static, null, v77, arg1);
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemtypeclassinvokemembertopic3.asp
и солнце б утром не вставало, когда бы не было меня
и солнце б утром не вставало, когда бы не было меня
Здравствуйте, ablazhko, Вы писали:
A>интересует как получить возвращаемое значение функции 1С
Все еще актуально. Посмотрел ссылки в конце ветки, ниче толком не понял
...Безумству храбрых поем мы песню... (с) М.Горький
От:
Red Bird
Дата: 24.08.06 06:46
Оценка:
Здравствуйте, t_a_n_k, Вы писали:
___>Здравствуйте, ablazhko, Вы писали:
A>>интересует как получить возвращаемое значение функции 1С
___>Все еще актуально. Посмотрел ссылки в конце ветки, ниче толком не понял
Тоже не все понял из этой ветки...
Вообще сейчас для обмена данными, что с V77, что с V8 можно (и даже нужно) использовать XML.
Благо на диске ИТС лежат две конфигурации:
1С:Предприятие 7.7. Конвертация данных;
1С:Предприятие 8.0. Конвертация данных.
Поэтому для offline проще (и надежнее) обмениваться данными через XML.
Здравствуйте, Red Bird, Вы писали:
RB>Поэтому для offline проще (и надежнее) обмениваться данными через XML.
xml в моем случае не подходит — нужно именно ловить возвращаемые значения.
...Безумству храбрых поем мы песню... (с) М.Горький
У меня получилось примерно следующее:
string BaseCatalog=@"\\Test_base" , User="TestDimon" ,Pass="123" ;
object [] arg=new object [3];
Type lateBoundType=Type.GetTypeFromProgID("v77S.Application" ,true );
object v77=Activator.CreateInstance(lateBoundType);
arg[0]=lateBoundType.InvokeMember("RMTrade" ,BindingFlags.Public | BindingFlags.InvokeMethod | BindingFlags.Static,null ,v77,null );
arg[1]=@"/D" +BaseCatalog+" /N" +User+" /P" +Pass;
arg[2]="" ;
lateBoundType.InvokeMember("Initialize" ,BindingFlags.Public | BindingFlags.InvokeMethod | BindingFlags.Static,null ,v77,arg);
object [] arg1 = new object [] {"FuckAchtung()" };
// выполняем ф-ию
object Params=lateBoundType.InvokeMember("EvalExpr" , BindingFlags.Public | BindingFlags.InvokeMethod | BindingFlags.Static, null , v77, arg1);
// получаем значения
txtInfo.Text+="Value: " +(string )Params;
//before exit
System.Runtime.InteropServices.Marshal.ReleaseComObject(v77);
// чистим память, иначе процесс все равно остается.
GC.GetTotalMemory(true );
Ф-ия в 1С позращает один параметр.
...Безумству храбрых поем мы песню... (с) М.Горький
От:
Red Bird
Дата: 24.08.06 11:14
Оценка:
Здравствуйте, t_a_n_k, Вы писали:
Ну, общем, да.
Только у меня 1cv7s.exe выгуржается из памяти по:
//before exit
System.Runtime.InteropServices.Marshal.ReleaseComObject(v77);
Здравствуйте, Red Bird, Вы писали:
RB>Здравствуйте, t_a_n_k, Вы писали:
RB>Ну, общем, да.
RB>Только у меня 1cv7s.exe выгуржается из памяти по:
RB>RB>//before exit
RB>System.Runtime.InteropServices.Marshal.ReleaseComObject(v77);
RB>
Ну дык она и должна в этом месте выгружаться, но как я понял не всегда.
У меня процесс висит, пока память не почищу.
...Безумству храбрых поем мы песню... (с) М.Горький
Господа, а как же все-таки передать аргумент в вызываеммую 1С-ную ф-ию?
Например делаю так:
object [] arg1 = new object [] {"SomeFunction()" };
Удачно проходит только аргумент, как строка:
object [] arg1 = new object [] {"SomeFunction(\"bla-bla\")" };
А как передать в функцию массив или еще че-нить?
...Безумству храбрых поем мы песню... (с) М.Горький
Пока на собственное сообщение не было ответов, его можно удалить.
Удалить