Форум: "Базы";
Текущий архив: 2002.04.01;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.005 c