Форум на Kuban.ru (http://forums.kuban.ru/)
-   Территория 1С (http://forums.kuban.ru/f1040/)
-   -   Обратиться к функции общего модуля (http://forums.kuban.ru/f1040/obratit-sya_k_funkcii_obshego_modulya-4247218.html)

bma1 25.05.2013 09:04

Обратиться к функции общего модуля
 
Встала проблемка, надо из приложения на C# обратиться к функции общего модуля (модуль имеет флажек вызов сервера). У функции экспорт стоит.

пишу соединение:
string server = "xxx";
string basename = "yyy";
string username = "zzz";
string password = "***";

string connectionString = String.Format("Srvr = {0**; Ref = {1**; Usr = {2**; Pwd = {3**",
server, basename, username, password);
object _V82Connector;
object V82Base;
Type V82Type;

object[] connectargs = new object[1];
connectargs[0] = connectionString;

V82Type = Type.GetTypeFromProgID("V82.COMConnector");
_V82Connector = Activator.CreateInstance(V82Type);
V82Base = V82Type.InvokeMember("Connect", System.Reflection.BindingFlags.Public|
System.Reflection.BindingFlags.Static|
System.Reflection.BindingFlags.InvokeMethod, null,
_V82Connector, connectargs);

и далее затор.... как обратиться к функции общего модуля?
пишу:
string qwery = (string)V82Base.GetType().InvokeMember("НекийОбщийМодуль.глНекаяФункцияВозвращающаяСтроку()", System.Reflection.BindingFlags.Public|
System.Reflection.BindingFlags.Static|
System.Reflection.BindingFlags.InvokeMethod, null,
V82Base, null);

получаю ошибку... чувствую, решение где-то рядом, какой-то из аргументов функции надо маленько изменить, и что-то ничего на ум не приходит. видимо настолько этот код замылил глаза, что в упор не вижу какой-то очевидной вещи...
Короче, СПАСИТЕ, ПОМОГИТЕ!!!!

bma1 26.05.2013 11:53

Где были мои глаза вчера? Что за фигню я написал?

Короче. Надо было писать так (сперва создать ссылку на общий модулт, а потом только из него вызвать функцию):
object common_module = V82Type.InvokeMember("НекийОбщий Модуль", System.Reflection.BindingFlags.GetProperty|
System.Reflection.BindingFlags.InvokeMethod, null,
V82Base, null);
string qwery = (string) V82Type.InvokeMember("глНекаяФункцияВозвращающаяСтроку", System.Reflection.BindingFlags.GetProperty|
System.Reflection.BindingFlags.InvokeMethod, null,
common_module, null); // тут вместо последнего null может стоять перечень аргументов вызываемой функции или процедуры в виде массива new object[] **"здесь переменные"**

P.S. я всегда знал, общение с VBA до добра не доведет. VBA отучает строго следить за типами, флагами и вызовами.

P.P.S. с глазами вообще хрень, что-то цветет и у меня глаза пунцовые как у зомбака... и все время чешутся... а от таблеток противоаллергических спишь все время... фигово-то как...

Helen1986 26.05.2013 13:56

[img]http://q-line.ru/news/images/1276597564_demotivator098.jpg[/img]


Текущее время: 21:41. Часовой пояс GMT +3.