![]() |
DLL und Komponenten
Hallo,
mal eine wohl recht simple Frage: Wie kann man eine bestimmte nicht visuelle Komponente, die man ja sonst auf einer Form in einer Anwendung hat (in meinem Fall eine TAdoConnect) in eine DLL ohne Forms packen? Sodass diese Komponente gleich "created" wird, also zur Verfügung steht, wenn die DLL geladen wurde und man somit die ganze Zeit darauf zugreifen kann. ...und am Ende natürlich wieder "freen". ;) Danke |
Re: DLL und Komponenten
So einfach nicht.
|
Re: DLL und Komponenten
Warum soll die Kompo für die Design-Zeit in die DLL?
Gruß oki |
Re: DLL und Komponenten
Ohne gemeinsame Laufzeitpackages kannst du schon gar keine "lebenden" Objekte aus einer DLL in der Exe zur verfügung stellen.
|
Re: DLL und Komponenten
alles was du zwischen begin und end in der DLL packst wird beim laden der DLL ausgeführt.
Wenn du beim laden und entladen etwas machen willst ist die einfachste variante eine neue Unit anzulegen (welche du dann in die dll einbinden musst) und dort folgendes:
Delphi-Quellcode:
unit Unitname;
interface implementation initialization //beim laden finalization //beim entladen end. |
Re: DLL und Komponenten
es geht darum, dass die DLL auch mit anderen Programmierumgebung aufgerufen werden kann und die AdoConnection vereinfacht in einer DLL untergebracht ist...
Ich habe gelesen mit Datamoduls könnte das was werden? Ich habe es folgendermaßen probiert nach A.Kosch:
Delphi-Quellcode:
library ADOinDLL;
uses SysUtils, Windows, Classes, ActiveX, ADOinDLL_DM in 'ADOinDLL_DM.pas' {DataModule1: TDataModule}; {$R *.res} procedure ShowData; stdcall; var iCount : Integer; begin CoInitialize(nil); try DataModule1 := TDataModule1.Create(nil); try DataModule1.ADOConnection1.Connected := True; DataModule1.ADODataSet1.Active := True; iCount := DataModule1.ADODataSet1COLUMN1.Value; DataModule1.ADODataSet1.Active := False; DataModule1.ADOConnection1.Connected := False; finally DataModule1.Free; end; finally CoUninitialize; end; MessageBox(0, PChar(IntToStr(iCount)), 'SELECT Count(*) FROM Categories', 0); end; exports ShowData; begin end. Der Client ruft die exportierte Schnittstellenprozedur der dynamisch importierten DLL auf:
Delphi-Quellcode:
Doch bei mir kommt da permanent Exception EOLEException in module...?
type
TShowData = procedure; var aShowData : TShowData; procedure TForm1.Button1Click(Sender: TObject); var hDLL : THandle; begin hDLL := LoadLibrary('C:\Ablage\ADOinDLL.dll'); if hDLL = 0 then begin ShowMessage('DLL kann nicht geladen werden'); Abort; end; @aShowData := GetProcAddress(hDLL, 'ShowData'); if Assigned(aShowData) then aShowData; FreeLibrary(hDLL); end; ...ok korrektur ...nun klappts, es lag an der adoconnection... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:17 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz