Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.04.2011, 14:27   #1
spiff
Новичок
Джуниор
 
Регистрация: 30.10.2008
Сообщений: 2
По умолчанию C# и E3.Dispatcher

Ситуация такова.
Имеется САПР E3Series. Имеется к нему приблуда E3.Dispatcher. Служит она для того, чтобы подключающиеся приложения могли показать пользователю диалог выбора открытого экземпляра E3. То есть если открыто несколько проектов, то пользователь выбирает нужный, программа получает его выбор и далее работает внутри этого проекта.

Ситуация такая. Если запустить это приложение самостоятельно, то все нормально. все экземпляры видны. Если из VBS (WSH), то тоже все норм.
А вот если из моей программы на C#, то открывается пустой список.

Вся документация к E3 расчитана на VBS, на их форуме мне ничего вразумительного не сказали.

На C# пересел недавно, так что закономерный вопрос. Может я что-то делаю неправильно?


работающий пример от разработчиков на VBS
Код:
		Set disp   = CreateObject("CT.Dispatcher")        				' external
		Set viewer = CreateObject("CT.DispatcherViewer")
		Set ConnectToE3 = Nothing
	    If IsObject(disp) Then									' test if E3.Dispatcher is installed
			ProcessCnt = disp.GetE3Applications(lst)					' read active E3 processes
			If ProcessCnt > 1 Then										' more than 1 process, ask for the project to connect 
	            ' Start DispatcherViewer and use the dispatcher interface for selecting an E3 process
	            If viewer.ShowViewer(e3Obj) = True Then					' display dispatcher interface to select process
				   Set ConnectToE3 = e3Obj
				Else
					MsgBox "Error getting object"	' !!!!! as long as bug in dispatcher viewer is available
					wscript.quit
				End If
			Else
				Set ConnectToE3 = CreateObject("CT.Application")
	        End If
		Else
			strComputer = "."												' dispatcher not installed
			Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
			Set colItems      = objWMIService.ExecQuery("Select * from Win32_Process",,48)
			ProcessCnt = 0
			For Each objItem In colItems
				If InStr(objItem.Caption, "E3.series") Then ProcessCnt = ProcessCnt + 1
			Next
			Set objWMIService = Nothing
			Set colItems      = Nothing
			If ProcessCnt > 1 Then
				MsgBox  "More than one E3-Application running. Script can't run as external program." & vbCrLf & "Please close the other E3-Applications.", 48
				WScript.Quit
			Else
				Set ConnectToE3 = CreateObject ("CT.Application")		' external
			End if
		End If
		Set disp   = nothing
		Set viewer = nothing
Мой работающий неверно код на C#
Код:
using e3;

namespace DispTest
{
    public partial class Form1 : Form
    {
        public e3Application e3App; //Приложение
        public e3Job e3J; //Проект
        public e3Sheet e3S; //Лист
        public e3Graph e3G; 
        public CT.Dispatcher disp;
        public CT.DispatcherViewer viewer;
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            DispatcherConnect();
        }

        public void DispatcherConnect()
        {
            disp = new CT.Dispatcher();
            viewer = new CT.DispatcherViewer();
            if (disp != null)
            {
                Object lst = new e3Application[] { };
                Object e3Obj = new e3Application();

                int ProcessCnt = disp.GetE3Applications(ref lst);
                    if (ProcessCnt >= 1)
                    {
                        if ((CT.DispatcherViewer)viewer.ShowViewer(ref e3Obj) == true)
                        {
                            e3App = (e3Application)e3Obj;
                        }
                        else
                        {
                            MessageBox.Show("Что - то не так", "Ошибка", MessageBoxButtons.OK);
                        };
                    }
                
                e3J = null;
                e3S = null;
                e3G = null;
                e3App = null;
            }
        }

     ...

    }
}
Если что-то еще надо, но я не представил, пишите, по возможности приложу.
spiff вне форума Ответить с цитированием
Старый 15.04.2011, 15:27   #2
spiff
Новичок
Джуниор
 
Регистрация: 30.10.2008
Сообщений: 2
По умолчанию

все, вопрос снят. решили сами.
spiff вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск