Главная страница
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.012 c
3-41
iea
2002-03-07 12:20
2002.04.01
Teкущее значение записи в ADO?


1-186
Алексей А
2002-03-19 21:41
2002.04.01
Компоненты


6-256
Yuraz
2002-01-17 18:30
2002.04.01
Есть кусок HTML кода, хотелось бы хоть примитивно преобразовать его в наглядную страницу


7-337
Pagan
2001-12-28 11:52
2002.04.01
Номер сетевой платы


7-336
Dorixe
2001-12-26 16:00
2002.04.01
SetLocaleInfo