|
Вопрос # 2 568/ вопрос открыт / |
|
Доброго времени суток, уважаемые эксперты!
Нужно в dll организовать загрузку данных в программу
Есть модуль: (1)
создаю dll: (2)
далее в основной проге пишу: (3)
после использования FreeLibrary(Lib) приводит к ошибке.
подскажите как можно реализовать загрузку данных с использованием dll.
Приложение: Переключить в обычный режим- (1)
-
- unit UnitDoc;
- interface
- uses classes;
- Type
- TDocItem = class
- FCpt: String;
- constructor create(S: String);
- end;
-
- TDocument = class
- private
- public
- FList: TList;
- procedure Add(Item: TDocItem);
- constructor Create;
- destructor Destroy; override;
- end;
-
- implementation
-
- { TDocument }
-
- procedure TDocument.Add(Item: TDocItem);
- begin
- FList.Add(Item)
- end;
-
- constructor TDocument.create;
- begin
- FList:=TList.Create;
- end;
-
- destructor TDocument.destroy;
- var i: Integer;
- begin
- For i:=0 to FList.Count-1 do TDocItem(FList[i]).Free;
- FList.Free;
- inherited;
- end;
-
- { TDocItem }
-
- constructor TDocItem.create(S: String);
- begin
- FCpt:=S
- end;
-
- end.
-
- (2)
-
- library TestDll2;
- uses SysUtils, Classes, UnitDoc, DBTables;
- {$R *.res}
- procedure Load(Doc: TDocument); export;
- var i: integer; T: TTable;
- begin
- T:=TTable.Create(nil);
- try
- T.DatabaseName := 'DBDEMOS';
- T.IndexFieldNames := 'Company';
- T.TableName := 'CUSTOMER.DB';
- T.Open;
- While not T.Eof do begin
- Doc.Add(TDocItem.Create(T.Fieldbyname('Company').AsString));
- T.Next
- end;
- finally T.Free end;
- end;
-
- exports Load;
-
- begin
- end.
-
- (3)
-
- uses UnitDoc;
-
- Type
- TProcL = procedure(D: TDocument);
-
- procedure TForm1.Button2Click(Sender: TObject);
- var i, Lib: Integer; S: String; PLoad: TProcL; Doc: TDocument;
- begin
- Doc:=TDocument.Create;
- Lib:=LoadLibrary('TestDLL2.dll'); if Lib=0 then halt;
- @PLoad:=GetProcAddress(Lib,'Load'); if @PLoad=nil then Halt;
- PLoad(Doc);
- Button2.Caption:=IntToStr(Doc.FList.Count);
- FreeLibrary(Lib);
- For i:=0 to Doc.FList.Count-1 do
- ListBox1.Items.add(TDocItem(Doc.FList[i]).FCpt);
- Doc.Free;
- end;
 |
Вопрос задал: Light007 (статус: Посетитель)
Вопрос отправлен: 26 марта 2009, 18:26
Состояние вопроса: открыт, ответов: 0.
|
Мини-форум вопроса
Всего сообщений: 1; последнее сообщение — 26 марта 2009, 18:49; участников в обсуждении: 1.
|
Вадим К (статус: Академик), 26 марта 2009, 18:49 [#1]:
ещё раз повторяю, где ShareMem?
Остальные ошибки я просто молчу. Крайне не рекомендую передавать класс через границу длл/приложение.
О бде я просто молчу.
Галочка "подтверждения прочтения" - вселенское зло.
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|