К списку форумов К списку тем
Регистрация    Правила    Главная форума    Поиск   
Имя: Пароль:
Рекомендовать в новости

Обратиться к функции общего модуля

0 - 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);

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



1 - 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. с глазами вообще хрень, что-то цветет и у меня глаза пунцовые как у зомбака... и все время чешутся... а от таблеток противоаллергических спишь все время... фигово-то как...
Гость
2 - 26.05.2013 - 13:56


К списку вопросов






Copyright ©, Все права защищены