Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   C# Syntaxprobleme mit einer Methode (https://www.delphipraxis.net/80271-syntaxprobleme-mit-einer-methode.html)

Luckie 6. Nov 2006 12:56


Syntaxprobleme mit einer Methode
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich will die Methode AddAlias aufrufen aus einer .NET Assembly. Im Anhang sieht man ein Screeshot aus Lutz Röders Refelctor wie das ganze aussieht.

Ich versuche die Methode wie folgt aufzurufen:
Code:
Db4o.configure.AddAlias(new Alias.TypeAlias("Demo_db4o.Person","Demo_db4o.Person, Demo_db4o"));
Allerdings unterstreicht mit VS die beiden öffnenden Klammern mit der Fehlermeldung:
Zitat:

Ungültiges Token "(" in Klasse, Struktur oder Schnittstellenmemberdeklaration.
Was ist da an der Syntax falsch?

In der Hilfe zu der Assembly steht folgendes Code-Beispiel:
Code:
Db4o.configure().addAlias(new TypeAlias("com.f1.Pilot", "com.f1.Driver"));
Allerdings scheint das Java Code zu sein, da dieser unter Java genau so funktioniert.

Der_Unwissende 6. Nov 2006 13:51

Re: Syntaxprobleme mit einer Methode
 
Hi,
ich glaube der versucht hier das new immer auf die erste "Variable" zu beziehen und wird hier Alias. als Datentyp verwenden wollen. Versuch es mal mit der (ungewohnt ausseshenden) Konstruktion

Code:
Db4o.configure.AddAlias(Alias.new TypeAlias("Demo_db4o.Person","Demo_db4o.Person, Demo_db4o"));
Unter Java ist zumindest ein ähnliches Konstrukt vorhanden.

Gruß Der Unwissende

Luckie 6. Nov 2006 13:55

Re: Syntaxprobleme mit einer Methode
 
Liste der Anhänge anzeigen (Anzahl: 1)
Danke für die Hilfe aber das hilft leider auch nicht. Der Einfachheit halber ein Screenshot mit den Fehlern.

phXql 6. Nov 2006 14:38

Re: Syntaxprobleme mit einer Methode
 
Ist Db4o.configure eine Methode oder eine Property? Wenns eine Methode ist, dann musst du Db4o.configure().addAlias machen..

Jürgen Thomas 6. Nov 2006 14:45

Re: Syntaxprobleme mit einer Methode
 
Hallo,

ist die Klasse, die Du über Db4o.configure benutzt, von ResXResourceWriter abgeleitet? Dann verstehe ich die NET-SDK-Hilfe so:
Code:
Db4o.configure.AddAlias("com.f1.Pilot", "com.f1.Driver");
Zitat:

Zitat von NET-SDK-Hilfe
Parameter
aliasName
Der Name des Alias.
assemblyName
Der Name der durch aliasName dargestellten Assembly.

Hilft Dir das? Gruß Jürgen

Luckie 6. Nov 2006 14:50

Re: Syntaxprobleme mit einer Methode
 
Habe ich auch schon probiert, das macht es nur noch schlimmer. In Java ist es wohl eine Methode.

Wenn ich mir den Reflektor richtig angucke, müsse es eiegntlich so heißen:
Code:
Db4o.Configuration.AddAlias(new Alias.TypeAlias("Demo_db4o.Person", "Demo_db4o.Person, Demo_db4o"));
Aber dann bekomme ich bei den öffnenden Klammern auch ein:
Zitat:

Ungültiges Token "(" in Klasse, Struktur oder Schnittstellenmemberdeklaration.
Auch das
Code:
Db4o.configure.AddAlias("com.f1.Pilot", "com.f1.Driver");
führt zu der Fehlermeldung
Zitat:

Ungültiges Token "(" in Klasse, Struktur oder Schnittstellenmemberdeklaration.
bei der ersten geöffneten Klammer. :gruebel:

Khabarakh 6. Nov 2006 14:55

Re: Syntaxprobleme mit einer Methode
 
Ich kann im Reflector nirgendwo ein "Alias.TypeAlias" finden, habe ich etwas auf dem Screenshot übersehen?
Code:
Db4o.configure.AddAlias(new TypeAlias("Demo_db4o.Person","Demo_db4o.Person, Demo_db4o"));
Falls phXqls Vermutung zutrifft, eben noch mit dem Klammerpaar, sieht auf dem zweiten Anhang aber eher nicht so aus.

Luckie 6. Nov 2006 14:59

Re: Syntaxprobleme mit einer Methode
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich hänge die Assembly mal an. Die db40 ist Freeware.

Khabarakh 6. Nov 2006 15:06

Re: Syntaxprobleme mit einer Methode
 
Code:
Db4o.Configure().AddAlias(new TypeAlias("Demo_db4o.Person","Demo_db4o.Person, Demo_db4o"));
Sollte so funktionieren. Aber kein "using com.db4o.config" vergessen oder in "new com.db4o.config.TypeAlias" ändern. Hast du den Rootnamespace com.db4o schon eingebunden, reicht auch "config.TypeAlias"

Luckie 6. Nov 2006 15:10

Re: Syntaxprobleme mit einer Methode
 
Liste der Anhänge anzeigen (Anzahl: 1)
das funktioniert irgendwie alles nicht. Siehe Screenshot.

St.Pauli 6. Nov 2006 15:33

Re: Syntaxprobleme mit einer Methode
 
Also das von Khabarakh funktioniert bei mir... Vieleicht liegts daran, wo du das ganze aufrufts? :gruebel:

Khabarakh 6. Nov 2006 15:47

Re: Syntaxprobleme mit einer Methode
 
Achso, jetzt ist die Erleuchtung gekommen ;) . Zwar lässt sich zum Initialisieren von Feldern Code wie "(static) double foo = Math.Sqrt(3);" direkt in den Klassenrumpf packen, alles andere muss aber schön in Methoden verpackt sein, so unübersichtlich ist C# nun auch wieder nicht :zwinker: . D.h., alle anderen Initialisierungen schiebst du in einen Konstruktor der Klasse (dort landen die Feldinitialisierungen letzten Endes ebenfalls), hier wohl am Ehesten der statische.
Code:
static Form1()
{
    Db4o.Configure().AddAlias(new TypeAlias("Demo_db4o.Person","Demo_db4o.Person, Demo_db4o"));
}

Jürgen Thomas 6. Nov 2006 15:54

Re: Syntaxprobleme mit einer Methode
 
Hallo Luckie,

ich habe mir die DLL mal mit Roeder's Reflector genauer angesehen. Dabei stelle ich fest:
Zitat:

public sealed class Config4Impl : Configuration, DeepClone, MessageSender, FreespaceConfiguration
public static Configuration Configure();
Wenn ich dies richtig lese, ist Configuration eine (feste) Instanz der Klasse Config4Impl und wird mit Configure() erzeugt. Also benötigst Du in der Tat:
Code:
... Db4o.Configure() ...
Zu dieser Klasse gibt es folgende Methode:
Code:
public void AddAlias(Alias alias);
Die Deklaration der Alias-Klasse und auch von TypeAlias habe ich (noch) nicht gefunden. Es spricht aber alles dafür, dass das richtige Verfahren so lautet:
Code:
Db4o.Configure().AddAlias(new Alias(...));
Vielleicht teilst Du das Verfahren auf, um im Debugger Details zu sehen:
Code:
Config4Impl cfg;
cfg = Db4o.Configure();
Alias xxx = new TypeAlias(...);
cfg.AddAlias(xxx);
Viel Erfolg! Jürgen

PS. Den Hinweis von Khabarakh verstehe ich nicht, oder ich würde es anders empfehlen. Eigene Initialisierungen - also auch die Config-Maßnahmen - können in den Konstruktor gelegt werden, aber nach InitializeComponents().

Khabarakh 6. Nov 2006 17:06

Re: Syntaxprobleme mit einer Methode
 
Zitat:

Zitat von Jürgen Thomas
Die Deklaration der Alias-Klasse und auch von TypeAlias habe ich (noch) nicht gefunden.

Der Reflector liefert dir eigentlich alles auf dem Präsentiertellerchen, weswegen ich meine Code auch in 10 Sekunden korrigieren konnte:
com.db4o.Db4o Erweitern -> Configure(), Klick auf Parameter -> com.db4o.config.Configuration, Erweitern -> AddAlias, Klick auf Parameter -> com.db4o.config.Alias, Erweitern -> Derived Types -> com.db4o.config.TypeAlias

Zitat:

PS. Den Hinweis von Khabarakh verstehe ich nicht, oder ich würde es anders empfehlen. Eigene Initialisierungen - also auch die Config-Maßnahmen - können in den Konstruktor gelegt werden, aber nach InitializeComponents().
Bisher war ich mir in diesem Thread nicht so sicher, aber bei diesem Thema hat mir mein "Objektorientierungssinn" (he, das muss ich mir merken ^^ ) eigentlich vollkommen zugestimmt.

Fassen wir einmal zusammen:
a) Wir rufen die Methode einer statischen Klasse auf.
b) Wir übergeben nur konstante Parameter.

c) Aus a) und b) folgt, dass die Instanz der Form für den Aufruf unwichtig ist.
d) Aus a) und b) können wir außerdem zusammen mit der etwaigen Kenntnis des Sinnes der Methode folgern, dass wir die Methode zu einer beliebigen Zeit in beliebigem Kontext aufrufen können.
e) Aus dem Sinn ergibt sich außerdem zusammen mit b), dass wir die Methode genau einmal im gesamten Verlauf der aktuellen AppDomain aufrufen sollten.
f) Und da der Aufruf wohl nicht zum Spaß allein existiert, sollten wir ihn vor der Methode von Form1 durchführen, die den Alias benötigt. Wie aber in d) gesagt ist die genaue Zeit, wann nun "davor" ist, irrelevant.

Daraus, besonders e), folgt für mich, dass das Ganze nur in einem statischen Konstruktor oder einem Singleton stattfinden kann. Und laut f) sollte es uns auch nicht stören, wenn dieser schon ein paar Schritte vor dem Instanzen-Konstruktor aufgerufen, was bei einem Singleton mit lazy Initialization nicht der Fall wäre.

Luckie 7. Nov 2006 09:07

Re: Syntaxprobleme mit einer Methode
 
Zitat:

Zitat von St.Pauli
Also das von Khabarakh funktioniert bei mir... Vieleicht liegts daran, wo du das ganze aufrufts? :gruebel:

:wall: http://www.michael-puff.de/files/mecker.gif

Das war's.


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:20 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