C++ Builder: Ungültige Typumwandlung beim Aufruf von ListLabel281->DataController->DetailSources->Add();

Sehr geehrtes Team!

Nun muss ich mich wieder einmal mit einem Problem an euch wenden.

Zur Information: Ich programmiere mit dem C++ Builder 11.2 Alexandria und verwende für Ausdrucke die List&Label28-Komponete TListLabel28 (Version vom Mai 2023).

Ich möchte zur Laufzeit eine 1:n Tabellenrelation im DataController erzeugen. Die für diesen Zweck u.a. notwendige Anweisung

—> TDetailSourceItem *einSourceItem = ListLabel281->DataController->DetailSources->Add();

wird fehlerlos (mit dem klassischen Borland-Compiler) compiliert (und dann gelinkt), führt aber bei ihrem Aufruf zur Laufzeit zu einer (mir unverständlichen) Fehlermeldung:

—> Ungültige Typumwandlung

Der Datentyp des Rückgabewerts dieser Anweisung ist doch TDetailSourceItem !! —> ???

Ich habe dies durch Screenshots eines Testprogramm dokumentiert, die sich im Anhang befinden:

Testformular-Header.png
Testformular-ccp-Datei.png
Testformular-Gestartet.png
Fehlermeldung-nach dem Button1-Click.png
Debuggeranzeige-zur-Fehlermeldung.png

Wer kann mir helfen?

Schöne Grüße an das Team!

Helmut Schüßler

Testformular-Header
Testformular-ccp-Datei
Testformular-Gestartet
Fehlermeldung-nach dem Button1-Click
Debuggeranzeige-zur-Fehlermeldung

Hallo Helmut,
wir konnten die Fehlermeldung reproduzieren. Bei einem kurzen Test mit Delphi, hat das allerdings funktioniert.
Warum es hier zu der Fehlermeldung “Ungültige Typumwandlung” kommt, ist uns hier noch nicht ganz klar. Wir werden dies noch weiter untersuchen und evtl. auch Embarcadero mit ins Boot holen müssen. Ich bitte dich hier um etwas Geduld und werde dich hier auf dem Laufenden halten.

Folgender Aufruf sollte hier funktionieren:

TDetailSourceItem* einSourceItem = (TDetailSourceItem*)ListLabelInvoiceList- 
>DataController->DetailSources->AddItem();
einSourceItem->Name = "MyNewOrders";
einSourceItem->DataSource = DataSourceOrders;
einSourceItem->PrimaryKeyField = "Id";

Add() kann hier in diesem Zusammenhang nicht verwendet werden, da es beim C++ Build der Komponente als HIDESBASE TDetailSourceItem __fastcall Add();* deklariert wurde. Man sollte hier stattdessen AddItem() verwenden und entsprechend casten.

Ich hoffe, dass hilft dir weiter.