|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Работа с _Recordset (COM+)
Доброго времени суток!
Помогите разобраться с такой проблемой. Есть COM сервер, Код:
IMyServer = interface(IAppServer) ['{1B3F3AA3-1DCE-40B1-BA13-9A95EEA439AB}'] function GetBlock(ATypeStort: Smallint): OleVariant; stdcall; end; Код:
TMyServer = class(TMtsDataModule, IMyServers) ... function GetBlock(ATypeStort: Smallint): OleVariant; End; uses ADOInt; ... function TMyServer.GetBlock(ATypeStort: Smallint): OleVariant; begin ... Result := CoRecordset.Create; ... end; Код:
... Var rec: _ Recordset; MyServer:IMyServer; ... rec := IDispatch( MyServer.GetBlock( 1 ) ) as _Recordset // Выдает ошибку При вызове из клиента вылетает access violation. Помогите вернуть клиенту _Recordset. |
#2
|
|||
|
|||
Всем сапибо! Тема закрыта!!!
Решение нашел сам. Если кто еще с таким сталкивался, можете использовать текст ниже. Код: //функция в COM должна быть объявлена так HRESULT _stdcall GetBlock([in] byte ATypeStort, [out, retval] VARIANT * Value ); // где Value - будит recordset Реализация функции Код: ... function TMyServer.GetBlock(ATypeStort: Smallint): OleVariant; begin ... Result := CreateOleObject('ADODB.Recordset'); // CDataBaseConnectionString - строка соединения Result.Open('select * from users', CDataBaseConnectionString, adOpenDynamic, adLockReadOnly, adCmdText); ... end; ... на клиенте вызывается так Код: ... var rec:_Recordset; ... rec := IDispatch( Authentication.GetBlock( 1 )) as _Recordset; ... |