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

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

ADOConnection и иже с ним [D5, MSSQL]


Egor111 ©   (2002-03-04 21:35:00) 

Ребят, помогите!!!
Нужно создавать ADOConnecion и ADOQuery в .dll
и соответственно работать там с ними.Как?


sniknik   (2002-03-05 16:48:00) [1]

Не совсем понял зачем dll в uses указывать? На всякий случай простой пример вызова.

Это описание Dll.
library MyDll;
uses Windows;

function SomeFunc(I: Integer): Integer; stdcall;
begin
if Odd(I) then Result := 3 * I + 1
else Result := I div 2;
end;

exports
SomeFunc;

begin
end.

Это модуль где он подключается.
unit MyDllImport;
interface
uses Windows;

function SomeFunc(I: Integer): Integer; stdcall;

implementation

function SomeFunc; external "mydll.dll"; { <- вот ссылка на саму Dll}

end.

а вот этот модуль можно и uses указать (хотя ничто не мешает ссылку описать прям там где используеш модуль, программа все равно)

по разному можно. я чаще использую динамическую привязку вот так GetInfo:= GetProcAddress(DllHandle, "GetInfo");
GetInfo здесь типа фунции с параметрами как в Dll описана
GetInfo: function: PChar; stdcall;
и последнее хендл получаеш так
DllHandle:= LoadLibrary("d:\dlls\MyDll.Dll"));
(немного сложней а выгоды большие)


Egor111   (2002-03-05 16:19:00) [2]

Спасибо!
Слушай, это все понятно, а
надо ли при этом указывать дополнительные
модули в uses(dll)?


sniknik   (2002-03-05 00:03:00) [3]

Ну примерно так, можно и по другому, разбирайся и если что пиши

function DllInit(Own: TComponent; ConString: WideString): Boolean; stdcall; {***}
var List:TStrings;
begin
DllOwner:= Own;
if not DirectoryExists(InPath) then ForceDirectories(InPath);
if not DirectoryExists(OutPath) then ForceDirectories(OutPath);
Result:= False;
try
{ADO}
SQLConnect:= TADOConnection.Create(DllOwner);
SQLConnect.LoginPrompt:= False;
SQLConnect.ConnectionString:= ConString;
SQLConnect.CursorLocation:= clUseServer;
TablesList:= TStringList.Create;
SQLConnect.GetTableNames(TablesList);
SQLCommand:= TADOCommand.Create(DllOwner);
SQLCommand.Connection:= SQLConnect;
SQLDataSet:= TADODataSet.Create(DllOwner);
SQLDataSet.Connection:= SQLConnect;
CreateInFiles;
CreateOutFiles;
{BDE}
TableIn:= TTable.Create(DllOwner);
TableIn.DatabaseName:= InPath;
TableOut:= TTable.Create(DllOwner);
TableOut.DatabaseName:= OutPath;
List:= TStringList.Create;
List.Add ("LANGDRIVER=db866ru0");
Session.ModifyDriver("DBASE",List);
List.Free;
Result:= True;
ErrMessage:= "Инициализация завершена.";
except
on E: EADOError do ErrMessage:= E.Message;
on E: EOleException do ErrMessage:= E.Message;
on E: EDataBaseError do ErrMessage:= E.Message;
else ErrMessage:= "Неизвестная ошибка!";
end;
end;

function DllClose: Boolean; stdcall;
begin
TablesList.Free;
DllClose:= True;
end;


Наверх

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