Главная страница
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.01 c
4-355
ilg
2002-01-30 17:17
2002.04.01
Как узнать Handle активного приложения!


1-117
Helpwuin
2002-03-21 16:30
2002.04.01
Шифрование


6-259
SemFLY
2002-01-18 21:05
2002.04.01
Передача файлов через Socket.


1-234
Kurt
2002-03-20 19:00
2002.04.01
Люди помогите плиз! Как сделать чтоб у окна был BorderStyle был bsDialog, но чтоб он имел возможность своарачиваться???


1-100
Maybe
2002-03-20 15:58
2002.04.01
экземпляры различных классов в одной коллекции