14.
s_vidyakin
68
08.06.09 20:02
Сейчас в теме
а, я нашел все таки:
СОЕДИНЕНИЕ:
v8connector = Type.GetTypeFromProgID("V81.COMConnector");
v8inst = Activator.CreateInstance(v8connector);
object[] arg = new object[] { @"File='" + txtPath.Text + "'; Usr ='" + txtLogin.Text + "';Pwd='" + txtPass.Text + "';" };
// Соединяемся
v8 = v8connector.InvokeMember("Connect", BindingFlag, null, v8inst, arg);
ПРИМЕР ВЫПОЛНЕНИЯ ЗАПРОСА:
// Создаем запрос
object Q = v8inst.GetType().InvokeMember("NewObject", BindingFlag, null, v8, new object[] { "Запрос" });
// Присваиваем свойству ТЕКСТ текст запроса
SetObjectProperty(Q, "Текст",txtQuery.Text);
// Выполняем!
object QResult = DoObjectMethod(Q, "Выполнить", null);
// Достаем объект "Колонки" и их число
object Cols = GetObjectProperty(QResult, "Колонки");
int NumCol = (int)DoObjectMethod(Cols, "Количество", null);
ОБЕРТКА ДЛЯ ПОЛУЧЕНИЯ/УСТАНОВКИ СВОЙСТВ и ВЫПОЛНЕНИЯ МЕТОДОВ 1С:
// Функция чтения свойства
public object GetObjectProperty(object refObject, string propertyName)
{
return v8inst.GetType().InvokeMember(propertyName, BindingFlags.GetProperty, null, refObject, null);
}
// Функция установки свойства
public object SetObjectProperty(object refObject, string propertyName, object value)
{
object[] arg = new object[] { value };
return v8inst.GetType().InvokeMember(propertyName, BindingFlags.SetProperty, null, refObject, arg);
}
// Функция выполнения метода
public object DoObjectMethod(object refObject, string methodName, object[] args)
{
return v8inst.GetType().InvokeMember(methodName, BindingFlag, null, refObject, args);
}
В принципе этого хватит чтоб написать любое взаимодействующее с 1С приложение. И без всяких маршаллингов :)