![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Вызов CallBack
Erik © (2002-10-23 18:56:00)Я работаю с Socket connection. Создаю интерфейс на клиенте
FClient := CoCallBack.Create; в CreateForm
После соеденения передяю серверу rs.AppServer.SetCallBack(FClient);
Все работает, но если сделать Disconect и опять законектится то финиш!
Пробова создать FClient := MyFactory.CreateComObject(MyFactory) as ICallBack;
Тотже эфект, но даже создать второй раз немогу.
Как решить эту проблему, какие требуются уточнения.
Romkin (2002-10-24 18:28:00) [1]Что-то я не понимаю, что делает TRemoteDataModule на клиентской части? Зачем? Должен быть TAutoObject или TAutoIntfObject
И какая ошибка на клиенте?
Erik (2002-10-24 17:59:00) [2]Да передаю снова интерфейс. Библиотеку типов я всегда импортирую.
А реализовано это так
На клиенте:
TCallBack = class(TRemoteDataModule, ICallBack)
.... protected
function DoOperation(AValue: OleVariant): OleVariant; safecall;
При создании формы вызывается метод сервера
procedure SetCallBack(AValue: OleVariant); safecall;
rs.AppServer.SetCallBack(FClient);
В сервере:
procedure TCallBackServer.SetCallBack(AValue: OleVariant);
begin
FCallBack := AValue; //FCallBack: IDispatch;
FMarshaler.Unknown := IUnknown(IDispatch(FCallBack));
//FMarshaler: TInterThreadMarshaler;
end;
Но ошибка происходит на клиенте! На сервере все нормально.
Erik (2002-10-24 17:59:00) [3]Да передаю снова интерфейс. Библиотеку типов я всегда импортирую.
А реализовано это так
На клиенте:
TCallBack = class(TRemoteDataModule, ICallBack)
.... protected
function DoOperation(AValue: OleVariant): OleVariant; safecall;
При создании формы вызывается метод сервера
procedure SetCallBack(AValue: OleVariant); safecall;
rs.AppServer.SetCallBack(FClient);
В сервере:
procedure TCallBackServer.SetCallBack(AValue: OleVariant);
begin
FCallBack := AValue; //FCallBack: IDispatch;
FMarshaler.Unknown := IUnknown(IDispatch(FCallBack));
//FMarshaler: TInterThreadMarshaler;
end;
Но ошибка происходит на клиенте! На сервере все нормально.
Romkin (2002-10-24 13:03:00) [4]И, кстати, ты после повторного соединения передаешь на сервер интерфейс снова?
Обращаться к методам сервера, кстати, рекомендую через dispinterface, импортировав библиотеку типов на клиент
Romkin (2002-10-24 12:59:00) [5]Ну и где хотя-бы какое-нибудь описание методов?
Так догадываться, где какой тип?