Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

RecordSet из DLL


tlan ©   (2004-05-04 18:34:00) 

Доброе всем время суток.
Возникло два таких вопроса (использую ADOQuery):
1. Функция, которая определена в dll, возвращает значение RecordSet, т.е. набор даных, которые она отобрала из базы например:
 function DocSearch(uid:SmallInt, upart:SmallInt):TRecordSet;
Могу ли я из основной программы получить данные, которые она вернула? И если да, то как.


tlan   (2004-05-04 20:30:00) [1]

вроде бы все работАет!
сам допустил некоторые ошибки, а функции так и должны выглядеть.
Спасибо за внимание.


tlan   (2004-05-04 20:15:00) [2]

вылетает Ошибка: Privileged Instruction


tlan   (2004-05-04 20:08:00) [3]

в dll:

Uses
 ...
 ActiveX,
 ADODB
 ...
function DocSearch(uid:SmallInt; upart:SmallInt):_RecordSet;
begin
 fmDocSearch:=TfmDocSearch.Create(nil);
 try
   fmDocSearch.UserID:=uid;
   fmDocSearch.UserPart:=upart;
   fmDocSearch.ShowModal;
   Result:=fmDocSearch.Query.Recordset;
 finally
   fmDocSearch.Free;
 end;
end;


в программе:

type
 TDocSearch=function(uid:SmallInt; upart:SmallInt):_RecordSet;
var
 LibHandle:THandle;
 DocSearch:TDocSearch;
begin
 LibHandle := LoadLibrary('RDSearch.dll');
 if LibHandle = 0 then
   raise Exception.Create('Не найдена библиотека RDSearch.dll')
 else begin
   try
     @DocSearch := GetProcAddress(LibHandle, 'DocSearch');
     if @DocSearch <> nil then
     fmMainQuery.Recordset:=DocSearch(StrToInt(UserID),StrToInt(UserPart));
   except
     on E: Exception do
       ShowMessage('Возникла ошибка: ' + E.Message);
   end;
 end;
 FreeLibrary(LibHandle);


Polevi   (2004-05-04 19:46:00) [4]

приведи код ф-ии полностью


tlan   (2004-05-04 19:17:00) [5]

я попробовал так:
функция в dll:
function DocSearch(uid:SmallInt; upart:SmallInt):_RecordSet;

вызывается в программе:
fmMainQuery.Recordset:=DocSearch(UserID,UserPart);

но приложение глухо "уходит в себя" без всяких ошибок.

А как это через IRecordset, если можно попобдробнее.


Polevi   (2004-05-04 18:46:00) [6]

можно возвращать IRecordset интерфейс - ADOQuery.Recordset


Наверх

Титульная страница Поиск, карта сайта Написать письмо