|
|
От: |
Vi2
|
http://www.adem.ru |
| Дата: | 25.11.02 06:51 | ||
| Оценка: | |||
Такой синтаксис — работа с присваиванием в OnXXXX — очень полезная идея объявления обработчика, и имеет продолжение в .NET в виде событий и делегатов. Но способ вызова этого обработчика, как правило, не оговаривается и определяется только объектом и языком этого объекта. Как ты заметил, для сервера на С++ будет бесполезной информация, написанная на языке VB. Поэтому у тебя руки развязаны. Как умеешь, так и реализуй. Умеешь вызывать функцию, требуй имя функции. Умеешь вызывать оператор, требуй оператор. Не умеешь, тогда используй обычные connection point.MV>Вот именно в этом то и все дело — как же сервер распоряжается этим OnAction, если клиент его никаким образом не запрашивает. Клиент непосредственно своим кодом не ставит обработчик, а просто, например, присваивет OnAction = "MySub(1, Now())". Заметим, что MySub — это локальная функция в адресном пространстве клиента и outproc сервер ее никак не может вызвать. К тому же сервер может быть написан на С++ и вообще не понимать синтаксис Basic'a. Так что, мне кажется, клиент как-то хитро должен эдвайзиться к серверу и потом забирать это выставленное OnAction. А я пишу сервер и хотелось бы знать, как реализовать аналогичную функциональность. И, вообще, это клиентом не обязательно будет Basic, а может быть и JavaScript, а сервер, в принципе, этого не отличает.
Тут механизма "эдвайза" нет ни в каком виде. Это обычный С++-callback, измененный под конкретный вид объекта сервера. Вот умеет он работать с именем функции, ему и дают имя функции.MV>Как мне кажется, там сама библиотека Basic RunTime, эдвайзится к чему-то и получает этот OnAction, но вот что надо реализовать, чтобы клиент мог правильно приэдвайзиться, я не знаю.