Re[5]: Implementing OnAction property for custom CommandBarC
От: Vi2 Удмуртия http://www.adem.ru
Дата: 25.11.02 06:51
Оценка:
Здравствуйте, mr.Vitaly, Вы писали:

MV>Вот именно в этом то и все дело — как же сервер распоряжается этим OnAction, если клиент его никаким образом не запрашивает. Клиент непосредственно своим кодом не ставит обработчик, а просто, например, присваивет OnAction = "MySub(1, Now())". Заметим, что MySub — это локальная функция в адресном пространстве клиента и outproc сервер ее никак не может вызвать. К тому же сервер может быть написан на С++ и вообще не понимать синтаксис Basic'a. Так что, мне кажется, клиент как-то хитро должен эдвайзиться к серверу и потом забирать это выставленное OnAction. А я пишу сервер и хотелось бы знать, как реализовать аналогичную функциональность. И, вообще, это клиентом не обязательно будет Basic, а может быть и JavaScript, а сервер, в принципе, этого не отличает.

Такой синтаксис — работа с присваиванием в OnXXXX — очень полезная идея объявления обработчика, и имеет продолжение в .NET в виде событий и делегатов. Но способ вызова этого обработчика, как правило, не оговаривается и определяется только объектом и языком этого объекта. Как ты заметил, для сервера на С++ будет бесполезной информация, написанная на языке VB. Поэтому у тебя руки развязаны. Как умеешь, так и реализуй. Умеешь вызывать функцию, требуй имя функции. Умеешь вызывать оператор, требуй оператор. Не умеешь, тогда используй обычные connection point.

MV>Как мне кажется, там сама библиотека Basic RunTime, эдвайзится к чему-то и получает этот OnAction, но вот что надо реализовать, чтобы клиент мог правильно приэдвайзиться, я не знаю.

Тут механизма "эдвайза" нет ни в каком виде. Это обычный С++-callback, измененный под конкретный вид объекта сервера. Вот умеет он работать с именем функции, ему и дают имя функции.
Vita
Выше головы не прыгнешь, ниже земли не упадешь, дальше границы не убежишь! © КВН НГУ
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.