![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
DLL Libraries [D6, Win2k]
ЗМВ © (2003-09-10 15:51:00)
Уважаемые мастера. Помогите новичку разобраться с DLL. Мне нужно написать программу, которая загружает 2 DLL. Одна подключает БД Access 97 по введенным параметрам, а 2-ая позволяет редактировать данные. Отображение на главной форме с помощью DBGrid. Текст первой библиотеки приведен ниже. При компиляции ошибок нет. В программе (см. ниже) осуществляется вызов процедур, но при запуске выдается ошибка "не вызван метод CoInitialize". Help помог мало, тк в английском я не силен, а в примерах вызова метода я не нашел.
library Project1;
...
type
P=^_RecordSet;
var
ADOCon:TADOConnection;
ADODst:TADODataSet;
procedure OpenDB(ConStr:PChar); stdcall;
begin
ADOCon:=TADOConnection.Create(nil);
ADOCon.ConnectionString:=WideString(ConStr);
ADOCon.Open;
ADODst:=TADODataSet.Create(ADOCon);
ADODst.CommandType:=cmdText;
ADODst.CommandText:="select Ware, Amount, Price from table";
ADODst.Open;
end;
procedure CloseDB; stdcall;
begin
ADODst.Close;
ADODst.Free;
ADOCon.Close;
ADOCon.Free;
end;
function GetRecordSet():P; stdcall;
begin
Result:=@ADODst.Recordset;
end;
exports
GetRecordSet,
OpenDB,
CloseDB;
....
----------------------------------------------
unit Unit1;
....
type P=^_RecordSet;
var
Form1: TForm1;
function GetRecordSet():P; external "Project1.dll";
procedure OpenDB(ConStr:PChar); external "Project1.dll";
procedure CloseDB; external "Project1.dll";
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
OpenDB(PChar(ADOConnection1.ConnectionString));
end;
....
HolACost! (2003-09-10 18:18:00) [1]
Для справки
DLL - уже включает слово Library!
ЗМВ (2003-09-10 16:46:00) [2]
спасибо. ошибок не выдает. Что бы я без Вас делал? :-)))
clickmaker (2003-09-10 16:37:00) [3]
При компиляции?
uses ActiveX
ЗМВ (2003-09-10 16:18:00) [4]
Выскакивает ошибка, что метод неизвестен.
procedure OpenDB(ConStr:PChar); stdcall;
begin
CoInitialize(nil);
ADOCon:=TADOConnection.Create(nil);
ADOCon.ConnectionString:=WideString(ConStr);
ADOCon.Open;
ADODst:=TADODataSet.Create(ADOCon);
ADODst.CommandType:=cmdText;
ADODst.CommandText:="select Ware, Amount, Price from table";
ADODst.Open;
end;
clickmaker (2003-09-10 16:14:00) [5]
Перед первым обращением к любому COM-объекту. В начале OpenDB, например.
ЗМВ (2003-09-10 15:59:00) [6]
А где именно его вызвать?
clickmaker (2003-09-10 15:56:00) [7]
А какой такой пример ты ожидал найти? :)
CoInitialize(nil) - и всё