Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.562 Beiträge
 
Delphi 12 Athens
 
#9

AW: FEHLER: Modul XXX ist mit Modul YYY verknüpft, das im aktuellen Projekt nicht ...

  Alt 16. Jul 2025, 17:05
Man kann Datenmodule auch referenzieren (wenn das Datenmodul in einem Design-Package geladen wird).

Wenn es in der IDE keine Instanz des DatenModuls gibt, z.B. weil diese Unit grade geöffnet ist,
dann erstellt Delphi intern selbst Eine, aber dafür muß es irgendwie die Unit dieses Moduls finden/identifizieren können. (z.B. wenn diese Unit im aktiven Projekt eingebunden ist und die Kennung/Kommentar mit dem Namen existiert)


RegisterFindGlobalComponentProc kann auch verwendet werden, falls es beim DFM-Laden in eigenen Programmen mal knallt.
"Eigentlich" registrieren sich TDataModule-Instanzen selbst, beim AddDataModule, aber manchmal will es doch nicht richtig funktionieren.


Delphi-Quellcode:
// beim Laden des Packages ( procedure Register; )
RegisterFindGlobalComponentProc(FindGlobalModules);

// und beim Entladen des Packages ( finalization )
UnregisterFindGlobalComponentProc(FindGlobalModules);


// globale/einzelne Function oder statische Class-Function.
class function TIDEHelperModul.FindGlobalModules(const Name: string): TComponent; static;
begin
  Result := nil;
  if SameText(Name, 'DM1') then Result := UDM1.DM1;
  if SameText(Name, 'CimDM_SysDB') then Result := UDataModul_SysDB.CimDM_SysDB;
  if SameText(Name, 'DMSys') then Result := USysModule.DMSys;
  //
  // nicht beim Laden / nur vollständig :
  // TReader.ReadRootComponent>FindUniqueName findet sich sonst selber und ändert den Namen -> "DM1" zu "DM1_1" -> Referenzen werden dann nicht mehr gefunden oder falsch gespeichert
  // Grund: siehe TDM1.Create -> globale Instanz vorher setzen, für deren Benutzung während des Ladens der enthaltenen TCimComponent und TCimQuery2
  if Assigned(Result) and ((csReading in Result.ComponentState) or (csDestroying in Result.ComponentState)) then
    Result := nil;
end;
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (16. Jul 2025 um 17:14 Uhr)
  Mit Zitat antworten Zitat