Schwierigkeiten mit Delphi Komponente
-
Hi.
Ich habe eine Delphi 1 Komponente und würde diese gerne in CBuilder5pro eintragen,
jedoch meldet er mir das BPL installiert wurde aber das Package ist leer (keine Komponente eingetragen)Ich gehe Komponente->Komponente installieren->Neues Package und wähle die PAS Datei aus und gebe dem Package einen Namen und eine Beschreibung. Drücke OK und compiliere, worauf er nur sagt BPL installiert.
In Projekte->Optionen...->Packages steht sie drin. Wähle ich sie aus und drücke auf den Komponenten Button ist die dortige Liste leer.
Was mache ich falsch?
Hier die Komponente und die Quellseite
http://www.leif-bruder.de/download.htm#TSlSaverunit SlSaver; interface uses Classes; type {------------------------------------------------------------------------------} TSlSaver = class(TComponent) public constructor Create(Owner: TComponent); override; destructor Destroy; override; protected FLines: TStringList; procedure SetLines(slNew: TStringList); published property Lines: TStringList read FLines write SetLines; end; {------------------------------------------------------------------------------} THashSaver = class(TSlSaver) public function GetValue(sHash: string): string; procedure SetValue(sHash, sValue: string); protected function FindIndex(sHash: string): LongInt; published property Lines; end; {------------------------------------------------------------------------------} procedure Register; implementation {##############################################################################} procedure Register; begin RegisterComponents('Lb', [TSlSaver, THashSaver]); end; {##############################################################################} {# #} {# SlSaver #} {# #} {##############################################################################} constructor TSlSaver.Create(Owner: TComponent); begin inherited Create(Owner); FLines := TStringList.Create; end; {##############################################################################} destructor TSlSaver.Destroy; begin FLines.Free; inherited Destroy; end; {##############################################################################} procedure TSlSaver.SetLines(slNew: TStringList); begin FLines.Assign(slNew); end; {##############################################################################} {# #} {# HashSaver #} {# #} {##############################################################################} function THashSaver.FindIndex(sHash: string): LongInt; var lHash: LongInt; begin lHash := 0; Result := -1; while lHash < FLines.Count do begin if copy(FLines[lHash], 1, length(sHash)+1) = sHash + '=' then begin Result := lHash; break; end; inc(lHash); end; end; {##############################################################################} function THashSaver.GetValue(sHash: string): string; var lHash: LongInt; begin lHash := FindIndex(sHash); if lHash = -1 then Result := '' else Result := copy(FLines[lHash], length(sHash)+2, length(FLines[lHash])); end; {##############################################################################} procedure THashSaver.SetValue(sHash, sValue: string); var lHash: LongInt; begin lHash := FindIndex(sHash); if lHash = -1 then begin FLines.Add(sHash + '=' + sValue); end else begin if sValue = '' then FLines.Delete(lHash) else FLines[lHash] := sHash + '=' + sValue; end; end; {##############################################################################} end.
-
Funktioniert einwandfrei. Es sind zwei Komponenten vorhanden.
Das Problem hatte ich aber auch einmal. Ich habe die Komponente deinstalliert. Danach alle erstellten Files ausser der PAS-Datei gelöscht. Dann den Vorgang wiederholen. Es hilft evtl. wenn man auch die PAS-Datei umbenennt und neu installiert. Vor der Installation evtl. noch vorhandene BPL-Dateien mit dem Namen löschen.
Warum das so war. Keine Ahnung.
-
Super Statement Michael! Und danke für die Frage delio *gg*
War schon am Verzweifeln und habe angefangen an der Borland C++ / Delphi Kompatibilität zu zweifeln.
Um auch noch anderen mit diesem Problem womöglich zu helfen; ich glaube, die Fehlerquelle (benutze Borland C++ 6.0) gefunden zu haben:Die Package Datei (.bpk) die erstellt wird (und die man angeben muss) darf nicht den selben Namen wie die pas-Datei bekommen !
Ich frage mich gerade: Braucht man immer den Pascal Quellcode (.pas) um die Delphi-Komponente einzufügen? Oder gibt es auch eine Möglichkeit, wenn man "nur" die folgenden Dateien besitzt:
bpl (Library), dcu (kompilierte Unit-Datei), dpk (Package Datei), res (Ressourcen-Datei) ??Na werde noch fleißig Kompenenteneinfügen rumprobieren ... und sicherlich noch auf die ein oder andere Schwierigkeit stoßen, die ich hier vermutlich dann schildern werde

Gruss,
Clemens
-
Wäre ja blöd für die kommerziellen Komponentenentwickler, wenn sie immer den Source rausgeben müßten -)
Na klar, du kannst auch einfach die .dcu-Dateien einbinden (diese müssen nur zu der Delphi-Version bzw. der C++ Builder-Version kompatibel sein, d.h. die Delphi 1 Dateien werden nicht funktionieren, da brauchst du schon den Source).