AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Algorithmen, Datenstrukturen und Klassendesign Delphi Unit zu unbekanntem Variablentype gesucht (generell)
Thema durchsuchen
Ansicht
Themen-Optionen

Unit zu unbekanntem Variablentype gesucht (generell)

Ein Thema von NoGAD · begonnen am 31. Mär 2024 · letzter Beitrag vom 2. Apr 2024
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von NoGAD
NoGAD

Registriert seit: 31. Jan 2006
Ort: Weimar
345 Beiträge
 
Delphi 10.4 Sydney
 
#1

Unit zu unbekanntem Variablentype gesucht (generell)

  Alt 31. Mär 2024, 09:40
Hallo,

euch ist es sicherlich auch schon einmal passiert, dass ihr (selbst hier in DP) einen Codeschnipsel gefunden habt, der ohne Uses-Klausel daherkommt.

Wenn jetzt ein unbekannter Typ deklariert wird, suche ich meistens per Google danach.

Im Moment habe ich einen Type, den ich nirgendwo finden kann.

Wie findet man im Normalfall die entsprechende Unit?

Hat bitte jemand die passende Unit zum Type:

Delphi-Quellcode:
var
  Sync: TSync;
LG und frohe Ostern
Mathias
Mathias
Ich vergesse einfach zu viel.
  Mit Zitat antworten Zitat
Benutzerbild von Olli73
Olli73

Registriert seit: 25. Apr 2008
Ort: Neunkirchen
741 Beiträge
 
#2

AW: Unit zu unbekanntem Variablentype gesucht (generell)

  Alt 31. Mär 2024, 09:52
Scheint was selbst abgeleitetes von TIdSync zu sein.

https://stackoverflow.com/questions/...er-sometimeout
  Mit Zitat antworten Zitat
Andreas13

Registriert seit: 14. Okt 2006
Ort: Nürnberg
719 Beiträge
 
Delphi XE5 Professional
 
#3

AW: Unit zu unbekanntem Variablentype gesucht (generell)

  Alt 31. Mär 2024, 10:44
... und TIdSync ist bei mir (XE5) in

C:\Program Files (x86)\Embarcadero\RAD Studio\12.0\source\Indy10\Core\IdSync.pas

deklariert.
Grüße, Andreas
Wenn man seinem Nächsten einen steilen Berg hinaufhilft, kommt man selbst dem Gipfel näher. (John C. Cornelius)
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.159 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

AW: Unit zu unbekanntem Variablentype gesucht (generell)

  Alt 31. Mär 2024, 10:48
Du kannst meist mit der Tastenkombo Strg+Shift+A die IDE selbst versuchen lassen, die richtige Unit dafür zu finden. Meist gibt das in den ersten zwei Anläufen eine nichtssagende Fehlermeldung, aber bei mir klappt es lustigerweise beim dritten oder fünften Anlauf relativ oft.
  Mit Zitat antworten Zitat
Andreas13

Registriert seit: 14. Okt 2006
Ort: Nürnberg
719 Beiträge
 
Delphi XE5 Professional
 
#5

AW: Unit zu unbekanntem Variablentype gesucht (generell)

  Alt 31. Mär 2024, 11:06
Bei mir (XE5) liefert die Tastenkombination Strg+Shift+A eine (oft "kilometerlange") Liste aller (auch indirekt) verwendeten Units...
Grüße, Andreas
Wenn man seinem Nächsten einen steilen Berg hinaufhilft, kommt man selbst dem Gipfel näher. (John C. Cornelius)
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.490 Beiträge
 
Delphi 7 Professional
 
#6

AW: Unit zu unbekanntem Variablentype gesucht (generell)

  Alt 31. Mär 2024, 18:56
Ich drücke bei Delphi 7 einfach F1 und schau in der Hilfe nach. Wenn die es nicht weiß, ist es was "nicht normales", also von außerhalb von dem, was Delphi von Haus aus mitliefert.

Da bei mir alle Delphisourcen unterhalb eines Verzeichnisses liegen, ordentlich geordnet nach Projekten, Komponenten, eigenes, fremdes, ... nutze ich einfach die Suchfunktion vom Windowscommander (oder 'nem beliebigen Klone) und lass den in allen *.pas-Dateien suchen. Werde so immer fündig oder das Gesuchte gibt es bei mir (noch) nicht.

Oder Kommandozeile:
Code:
@for /f %i in ('dir /s /b *.pas') do @find "TSync" "%i"
per Grep (für ein Verzeichnis):
Code:
c:\delphi7\bin\grep "TSync" c:\delphi\*.pas
per Grep (für eine Verzeichnisstruktur):
Code:
@for /f %i in ('dir /AD /s /b') do @c:\delphi7\bin\grep "TSync" "%i\*.pas" 1>>c:\temp\Fundstellen.txt 2>>nul
  Mit Zitat antworten Zitat
Benutzerbild von NoGAD
NoGAD

Registriert seit: 31. Jan 2006
Ort: Weimar
345 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: Unit zu unbekanntem Variablentype gesucht (generell)

  Alt 31. Mär 2024, 19:48
Vielen lieben Dank für eure Hilfe.

Die Ableitung von TIdSync hatte ich auch gefunden, der Zusammenhang wollte mir aber nicht richtig einleuchten.

Hier noch einmal etwas mehr Code:

Delphi-Quellcode:
type
  TMyJSON = record
    TotalItems: Integer;
    Items: TJSONArray;
    ItemsArray: Array of TJSon_Items;
    Result: Boolean;
  end;

var
  MyJSON: TMyJSON;
  MyJSONArray: TArray<TMyJSON>;
  Dummy_Count: Integer;
  Tasks: TList<TTask>;
  Sync: TSync;

procedure SearchGoogleSingleISBNTask(const Dummy_String: string);
var
  MyJSON: TMyJSON;
begin
  MyJSON := SearchGoogleSingleISBN(Dummy_String);
  // ...weitere Verarbeitung von MyJSON...
end;

begin
  Dummy_Count := ListBox1.Count - 1;
  SetLength(MyJSONArray, Dummy_Count);
  Sync := TSync.Create;

  uses System.SyncObjects; // Add this line

  for Dummy_Int := Dummy_Count downto 0 do
  begin
    while Tasks.Count >= 5 do
      Sync.WaitFor;

    TTask.Create(
      procedure
      begin
        SearchGoogleSingleISBNTask(ListBox1.Items[Dummy_Int]);
        Sync.Signal;
      end
    ).Start;
    Tasks.Add(TTask.Last);
  end;

  // Warten auf Abschluss aller Tasks
  while Tasks.Count > 0 do
    Sync.WaitFor;

  // ...Datenbankaktualisierung...
  for Dummy_Int := 0 to Dummy_Count do
  begin
    MyJSON := MyJSONArray[Dummy_Int];
    if MyJSON.TotalItems = 1 then
      // ...hier Code zur Datenbankaktualisierung...
  end;
end;
Mathias
Ich vergesse einfach zu viel.
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.490 Beiträge
 
Delphi 7 Professional
 
#8

AW: Unit zu unbekanntem Variablentype gesucht (generell)

  Alt 1. Apr 2024, 09:59
Die KI meiner Wahl hat dazu folgendes zu vermelden:
Zitat von Frage:
Können Sie mir für Delphi die Unit benennen, in der die Klasse TSync definiert ist?
Zitat von Antwort:
Entschuldigung, aber ich konnte keine spezifische Delphi-Unit finden, in der die Klasse TSync definiert ist. Es könnte sein, dass diese Klasse in einer benutzerdefinierten Unit definiert ist oder in einer weniger bekannten oder veralteten Delphi-Unit. Es wäre hilfreich, wenn Sie weitere Details oder den Kontext bereitstellen könnten, in dem Sie diese Klasse verwenden. Bitte überprüfen Sie auch die Dokumentation oder den Quellcode, wenn Sie Zugriff darauf haben.

Quelle: Unterhaltung mit Bing, 1.4.2024
(1) delphi - How do you create a class in one unit, and use it as a return .... https://stackoverflow.com/questions/...-in-another-un.
(2) Programme und Units (Delphi) – RAD Studio. https://docwiki.embarcadero.com/RADS...amme_und_Units.
(3) Klassen und Objekte (Delphi) – RAD Studio. https://docwiki.embarcadero.com/RADS...e_%28Delphi%29.
Zitat von Frage:
Mir ist in dem Zusammenhang nur der nachfolgende Quelltext bekannt:
Delphi-Quellcode:
type
  TMyJSON = record
    TotalItems: Integer;
    Items: TJSONArray;
    ItemsArray: Array of TJSon_Items;
    Result: Boolean;
  end;

var
  MyJSON: TMyJSON;
  MyJSONArray: TArray<TMyJSON>;
  Dummy_Count: Integer;
  Tasks: TList<TTask>;
  Sync: TSync;

procedure SearchGoogleSingleISBNTask(const Dummy_String: string);
var
  MyJSON: TMyJSON;
begin
  MyJSON := SearchGoogleSingleISBN(Dummy_String);
  // ...weitere Verarbeitung von MyJSON...
end;

begin
  Dummy_Count := ListBox1.Count - 1;
  SetLength(MyJSONArray, Dummy_Count);
  Sync := TSync.Create;

  uses System.SyncObjects; // Add this line

  for Dummy_Int := Dummy_Count downto 0 do
  begin
    while Tasks.Count >= 5 do
      Sync.WaitFor;

    TTask.Create(
      procedure
      begin
        SearchGoogleSingleISBNTask(ListBox1.Items[Dummy_Int]);
        Sync.Signal;
      end
    ).Start;
    Tasks.Add(TTask.Last);
  end;

  // Warten auf Abschluss aller Tasks
  while Tasks.Count > 0 do
    Sync.WaitFor;

  // ...Datenbankaktualisierung...
  for Dummy_Int := 0 to Dummy_Count do
  begin
    MyJSON := MyJSONArray[Dummy_Int];
    if MyJSON.TotalItems = 1 then
      // ...hier Code zur Datenbankaktualisierung...
  end;
end;
Zitat von Fortsetzung der Frage:
Können Sie damit etwas anfangen oder ist das bei der Suche hilfreich?
Zitat von Antwort:
Ja, das ist sehr hilfreich. In Ihrem Code verwenden Sie die Klasse 'TSync' aus der Unit 'System.SyncObjects'. Diese Klasse ist Teil der Delphi-Standardbibliothek und wird für die Synchronisation von Threads in einer Multithread-Anwendung verwendet².

In Ihrem speziellen Fall wird 'TSync' verwendet, um die Ausführung von parallelen Tasks zu koordinieren. Die Methode 'WaitFor' blockiert die Ausführung des Hauptthreads, bis ein Signal von einem der parallelen Tasks empfangen wird, das durch die Methode 'Signal' gesendet wird. Dies stellt sicher, dass der Hauptthread auf den Abschluss aller parallelen Tasks wartet, bevor er fortfährt.

Bitte beachten Sie, dass Sie die Unit 'System.SyncObjects' in den Uses-Klauseln am Anfang Ihrer Unit hinzufügen müssen, nicht innerhalb der Prozedur oder Funktion. Hier ist der korrigierte Code:
Delphi-Quellcode:
uses
  System.SyncObjects; // Move this line to the top

type
  TMyJSON = record
    TotalItems: Integer;
    Items: TJSONArray;
    ItemsArray: Array of TJSon_Items;
    Result: Boolean;
  end;

var
  MyJSON: TMyJSON;
  MyJSONArray: TArray<TMyJSON>;
  Dummy_Count: Integer;
  Tasks: TList<TTask>;
  Sync: TSync;

procedure SearchGoogleSingleISBNTask(const Dummy_String: string);
var
  MyJSON: TMyJSON;
begin
  MyJSON := SearchGoogleSingleISBN(Dummy_String);
  // ...weitere Verarbeitung von MyJSON...
end;

begin
  Dummy_Count := ListBox1.Count - 1;
  SetLength(MyJSONArray, Dummy_Count);
  Sync := TSync.Create;

  for Dummy_Int := Dummy_Count downto 0 do
  begin
    while Tasks.Count >= 5 do
      Sync.WaitFor;

    TTask.Create(
      procedure
      begin
        SearchGoogleSingleISBNTask(ListBox1.Items[Dummy_Int]);
        Sync.Signal;
      end
    ).Start;
    Tasks.Add(TTask.Last);
  end;

  // Warten auf Abschluss aller Tasks
  while Tasks.Count > 0 do
    Sync.WaitFor;

  // ...Datenbankaktualisierung...
  for Dummy_Int := 0 to Dummy_Count do
  begin
    MyJSON := MyJSONArray[Dummy_Int];
    if MyJSON.TotalItems = 1 then
      // ...hier Code zur Datenbankaktualisierung...
  end;
end;
Zitat von Fortsetzung der Antwort:
Ich hoffe, das hilft! Wenn Sie weitere Fragen haben, lassen Sie es mich bitte wissen.

Quelle: Unterhaltung mit Bing, 1.4.2024
(1) System.SyncObjs.TSynchroObject - RAD Studio API Documentation. https://docwiki.embarcadero.com/Libr...TSynchroObject.
(2) Why TSync(Time Synchronization) is needed in Adaptive AUTOSAR?. https://stackoverflow.com/questions/...aptive-autosar.
(3) Specification of Time Synchronization - AUTOSAR. https://www.autosar.org/fileadmin/st...ronization.pdf.
Der Fehler liegt in der Zeile des Quelltextes, die mich sofort stutzig gemacht hat: Das Uses mitten im Quelltext.

Geändert von Delphi.Narium ( 1. Apr 2024 um 12:48 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von NoGAD
NoGAD

Registriert seit: 31. Jan 2006
Ort: Weimar
345 Beiträge
 
Delphi 10.4 Sydney
 
#9

AW: Unit zu unbekanntem Variablentype gesucht (generell)

  Alt 2. Apr 2024, 09:09
Hallo nochmal

Danke @Delphi.Narium. Leider scheint die KI nicht ganz richtig zu liegen. Bei mir (Delphi 10.4) gibt es keine Unit System.SyncObjects

Es gibt eine System.SyncObjs, aber die scheint auch keine Deklaration vom Type TSync zu kennen.

Weiterhin habe ich bei meinem Beispielcode vergessen, zu erwähnen, dass mein Type TMyJSON in einer anderen unit liegt. Somit hatte ich einfach den Code aus zwei unterschiedlichen Bereichen zusammengefasst. Auch die Variablen liegen innerhalb einer Procedure, sind also nicht global definiert.

Tut mir leid für das Missverständnis.

LG
Mathias
Ich vergesse einfach zu viel.
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.582 Beiträge
 
Delphi 11 Alexandria
 
#10

AW: Unit zu unbekanntem Variablentype gesucht (generell)

  Alt 2. Apr 2024, 09:18
Leider scheint die KI nicht ganz richtig zu liegen. Bei mir (Delphi 10.4) gibt es keine Unit System.SyncObjects
Die Unit hat die KI einfach aus deinem Quelltext genommen. Anhand des Namespaces ergab dann die Analyse, dass es eine RTL-Unit sein muss, auch wenn die KI diese vorher nicht kannte.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:01 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz