Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
Online
Зарегистрирован: 10.06.2008 Сообщения: 26
|
Добавлено: Вс Мар 11, 2012 12:03 pm Заголовок сообщения: Вызов функции из другой MBX |
|
|
Добрый день! Нужен совет специалистов. Я из основной программы MBX вызываю другую MBX (которая создает панель с кнопками). По нажатию на одну из кнопок хочу уведомить основную программу, чтобы та выполнила некоторые действия (вызвала функцию/процедуру) и по окончании работы уведомила вторую MBX об окончании работы функции/процедуры. Пробую делать через DDE, но появляются ошибки. Еще заметил, что после вызова DDEExecute "подвисает" на несколько секунд MapInfo.
Код: |
Include "mapbasic.def"
Declare Sub Main
Declare Sub RemoteMsgHandler
Declare Sub StartProc
Sub Main
Terminate Application "second.mbx"
Run Application ApplicationDirectory$() + "second.mbx"
End Sub
Sub RemoteMsgHandler
If CommandInfo(CMD_INFO_MSG) = "Start" Then
Call StartProc
End If
End Sub
Sub StartProc
' <обработка>
' уведомляем об окончании
Dim iChanel As integer
iChanel = DDEInitiate("MapInfo", "second.mbx")
DDEExecute iChanel, "End"
DDETerminate iChanel
End Sub
|
Код: |
Declare Sub Main
Declare Sub TestProc
Declare Sub TestProcAfter
Declare Sub RemoteMsgHandler
Sub Main
Create ButtonPad "Test" As
PushButton
Calling TestProc
End Sub
Sub TestProc
Dim iChanel As integer
iChanel = DDEInitiate("MapInfo", "main.mbx")
DDEExecute iChanel, "Start"
DDETerminate iChanel
End Sub
Sub TestProcAfter
Note "TestProcAfter"
End Sub
Sub RemoteMsgHandler
If CommandInfo(CMD_INFO_MSG) = "End" Then
Call TestProcAfter
End If
End Sub
|
|
|
Вернуться к началу |
|
|
Андрей Могильный
Зарегистрирован: 21.03.2006 Сообщения: 864
|
Добавлено: Вс Мар 11, 2012 9:19 pm Заголовок сообщения: |
|
|
У вас тут синхронный двунаправленный DDE-вызов. Т.е. первый вызов рождает обратный второй DDE-вызов. Я бы посоветовал использовать обработчик RemoteQueryHandler, вместо RemoteMsgHandler, он такие вызовы лучше переваривает. Правда я не уверен, может ли RemoteQueryHandler использоваться в DDE (точно используется в OLE), поштудируйте документацию на этот счет. |
|
Вернуться к началу |
|
|
thegeo
Зарегистрирован: 17.01.2012 Сообщения: 119
|
Добавлено: Вс Мар 11, 2012 10:42 pm Заголовок сообщения: |
|
|
1. Почему бы не собрать обе программы в один mbx.
2. Не ясно, какое уведомление требуется, так как возврат в вызывающую программу и есть уведомление.
3. В предложенной конструкции действительно возникает ошибка. Вероятно, нельзя переназначить клиент и сервер для уже открытой связи. |
|
Вернуться к началу |
|
|
|