![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Доброго времени суток!
Помогите разобраться с такой проблемой. Есть 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; ... |