Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.04.01;
Скачать: CL | DM;

Вниз

ADOConnection и иже с ним   Найти похожие ветки 

 
Egor111   (2002-03-04 21:35) [0]

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


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

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

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;


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

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


 
sniknik ©   (2002-03-05 16:48) [3]

Не совсем понял зачем 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"));
(немного сложней а выгоды большие)



Страницы: 1 вся ветка

Текущий архив: 2002.04.01;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.014 c
1-223
MaXie
2002-03-20 12:50
2002.04.01
Массив объектов.


6-265
Malder
2002-01-19 13:39
2002.04.01
Перехват Socket соединения


3-61
SergikSoft
2002-03-06 12:54
2002.04.01
Создание клиент-сервера в


1-109
YanKY
2002-03-13 09:22
2002.04.01
Интперпритатор языка Паскаль


3-5
sniknik
2002-03-05 16:27
2002.04.01
Обновляемый запрос