|
|
| |
| |
Hallo und herzlich willkommen! Tutorials.de ist eine Hilfe-Community mit dem Motto User helfen Usern. Als Gast verfügst Du über Schreibrechte in unseren Foren und Blogs. Du kannst dich aber gerne auch kostenlos registrieren und Teil unserer Gemeinschaft werden! Viel Spaß & Erfolg bei der Vermehrung deines Wissens :-)
|
|
|
 |
|
|
|
|
|
|
08.02.10, 22:26
|
#1 (permalink)
|
|
Großer Enumerator
Registriert seit: May 2008
Ort: Lohfelden (bei Kassel)
Beiträge: 293
Renommee-Modifikator: 6 
|
[.NET WinForms C++] Namespace-Erweiterung
Guten Abend Liebe Community.
Mein Problem ist, wie man am Quelltext-Ausschnitt schon merken wird, etwas speziell. Hängt mit dem Projekt zusammen, mit dem ich arbeite.
Ich versuche es mal zu erklären.
In meiner Form.h geschieht folgender Aufruf:
|
cpp Code:
|
-
-
-
-
-
-
-
| //add event listeners to changes in the wiiremote //fired for every input report - usually 100 times per second if acclerometer is enabled this->wm->WiimoteChanged += gcnew WiimoteLib::WiimoteChangedEventHandler(); //fired when the extension is attached on unplugged this->wm->WiimoteExtensionChanged += gcnew WiimoteExtensionChangedEventHandler();
|
|
wm ist ein Objekt der Klasse Wiimote, die wiederum in dem WiimoteLib namespace aus der WiimoteLib.dll implementiert ist.
so nun wollte ich den Namespace in einer anderen datei (Events.h) erweitern. Etwa so:
|
cpp Code:
|
-
-
-
-
-
-
-
-
| public delegate void WiimoteChangedEventHandler(System::Object^ sender, WiimoteChangedEventArgs^ args); public delegate void WiimoteExtensionChangedEventHandler(System::Object^ sender, WiimoteChangedEventArgs^ args);
|
|
Nun meldet der Kompiler folgendes:
|
Code:
|
error C2039: 'WiimoteChangedEventHandler': Ist kein Element von 'WiimoteLib'
error C2061: Syntaxfehler: Bezeichner 'WiimoteChangedEventHandler'
error C2039: 'WiimoteExtensionChangedEventHandler': Ist kein Element von 'WiimoteLib'
error C2061: Syntaxfehler: Bezeichner 'WiimoteExtensionChangedEventHandler'
|
Die Syntaxfehler sind "Folgefehler", aber die eigentliche Ursache kann ich leider nicht nachvollziehen.
Interessant ist auch, dass Wenn ich im Kompiler die Zeile schreibe:
---->WiimoteLib
und danach die zwei "::" setze wird im PopUp die o.g. Funktion gelisstet, dennoch erscheint die Meldung.
Was mach ich falsch? Hoffe mir kann jemand helfen.
MfG Marschal
__________________
╔══════════════════════════════════════════════════════════════════════╗
║ABI 2010 DV-LK (geschafft) + 19.03 Mathe-LK + 22.03 Deutsch Schriftl. + 24.03 Abgabe der besonderen Lernleistung.║
╚══════════════════════════════════════════════════════════════════════╝
Das ist ein Spaß...:)
" Gehirn: ein Organ, mit dem wir denken, daß wir denken. "
Ambrose Bierce
|
08.02.10, 23:04
|
#2 (permalink)
|
|
Mitglied Diamant
Registriert seit: Jun 2005
Beiträge: 5.917
|
AW: [.NET WinForms C++] Namespace erweiterung
Hi.
Warum willst du denn unbedingt den Event-Handler in dem fremden Namensraum erstellen?
Wo wird denn der Fehler angezeigt? Welche Dateien sind da jetzt beteiligt und wo wird welche Datei include'd?
Gruß
__________________
.:Mitglied des 1. offiziellen Sven Uwe Fan-Clubs:.
|
08.02.10, 23:11
|
#3 (permalink)
|
|
Großer Enumerator
Registriert seit: May 2008
Ort: Lohfelden (bei Kassel)
Beiträge: 293
Renommee-Modifikator: 6 
|
AW: [.NET WinForms C++] Namespace erweiterung
Hi, danke für deine schnelle Antwort,
Der Eventhandler wird ja nicht im fremden Namespace deklariert, oder?!
Also.
Ich habe die Form1.h, in der Auch der Fehler entsteht.
Dan die Main, in der auch alles includet wird, also die form1.h und die events.h.
In der Events.h ist der Namespace "WiimoteLib", in dem die zwei delegate Funktionen sind.
Der eigentliche Namespace "WiimoteLib" ist in einer externen managed DLL (WiimoteLib.dll)
__________________
╔══════════════════════════════════════════════════════════════════════╗
║ABI 2010 DV-LK (geschafft) + 19.03 Mathe-LK + 22.03 Deutsch Schriftl. + 24.03 Abgabe der besonderen Lernleistung.║
╚══════════════════════════════════════════════════════════════════════╝
Das ist ein Spaß...:)
" Gehirn: ein Organ, mit dem wir denken, daß wir denken. "
Ambrose Bierce
|
09.02.10, 08:37
|
#4 (permalink)
|
|
Mitglied Diamant
Registriert seit: Jun 2005
Beiträge: 5.917
|
AW: [.NET WinForms C++] Namespace erweiterung
Zitat:
Zitat von Marschal
Der Eventhandler wird ja nicht im fremden Namespace deklariert, oder?!
|
Stimmt. Du hast gar keinen Event-Handler deklariert/definiert.
Aber wozu willst du die delegate in einem fremden Namensraum deklarieren? Man pfuscht nicht in anderen Namensräumen rum.
Zitat:
Zitat von Marschal
Also.
Ich habe die Form1.h, in der Auch der Fehler entsteht.
Dan die Main, in der auch alles includet wird, also die form1.h und die events.h.
|
Und in form1.h inkludierst du events.h nicht?
Warum willst du denn überhaupt nochmal neue delegate erstellen? Zumal das dann völlig unterschiedliche Typen sind...
|
cpp Code:
|
-
| this->wm->WiimoteChanged += gcnew EventHandler<WiimoteChangedEventArgs^>(this, &Klass::ChangedHandlerMethod);
|
|
Gruß
__________________
.:Mitglied des 1. offiziellen Sven Uwe Fan-Clubs:.
|
09.02.10, 20:34
|
#5 (permalink)
|
|
Großer Enumerator
Registriert seit: May 2008
Ort: Lohfelden (bei Kassel)
Beiträge: 293
Renommee-Modifikator: 6 
|
AW: [.NET WinForms C++] Namespace-Erweiterung
Also mein Prolem mit den delegate Funktionen hat sich nun geklärt  Ich hatte die Datei falsch includet. Ich hab sie jetzt in der stdafx.h includet, im Vorkompilierten Header ist das ganze deutlich handsamer. Doch nun ein anderes Problem
ich möchte eine Klasse Ableiten. Doch krieg ich die Fehlermeldung:
|
Code:
|
...Events.h(24) : error C2011: 'WiimoteLib::WiimoteExtensionChangedEventArgs': 'class' Typneudefinition
...wiimotelib.dll: Siehe Deklaration von 'WiimoteLib::WiimoteExtensionChangedEventArgs'
|
Die Klasse hab ich wie folgt Angelegt:
|
cpp Code:
|
-
-
-
| ref class WiimoteExtensionChangedEventArgs :
|
|
Kompilieren tue ich übrigends mit /clr  ure, immer noch .net, immer noch selbiges Projekt.
Was mach ich falsch.
@deepthroat: Übrigends, warum ich "in anderen Namensräumen rumpfusche" ist, weil ich mich an einem Ähnlichen Beispiel orientiere, dieses ist jedoch in c# gestalltet. Deswegen möchte ich den Code erst mal genau so lauffähig kriegen. Ich werde nacher eh noch aufräumen müssen... Oder schlägst mir den Code aus der Events.h in die Form1.h zu übernehmen.
Hier mal Die Events.h:
|
cpp Code:
|
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
| namespace WiimoteLib //der namespace aus der WiimoteLib.dll ist der selbe...liegt der Hund evtl hier? /// Event to handle a state change on the Wiimote /// <param name="sender">Object sending the event</param> /// <param name="args">Current Wiimote state</param> public delegate void WiimoteChangedEventHandler(System::Object^ sender, WiimoteChangedEventArgs^ args); /// Event to handle insertion/removal of an extension (Nunchuk/Classic Controller) /// <param name="sender">Object sending the event</param> /// <param name="args">Current extension status</param> public delegate void WiimoteExtensionChangedEventHandler(System::Object^ sender, WiimoteChangedEventArgs^ args); /// Argument sent through the WiimoteExtensionChangedEvent ref class WiimoteExtensionChangedEventArgs : /// The extenstion type inserted or removed public: ExtensionType p_ExtensionType; /// Whether the extension was inserted or removed /// <param name="type">The extension type inserted or removed</param> /// <param name="inserted">Whether the extension was inserted or removed</param> public: WiimoteExtensionChangedEventArgs(ExtensionType ext, bool inserted) ExtensionType type = ext; /// Argument sent through the WiimoteChangedEvent ref class WiimoteChangedEventArgs: /// The current state of the Wiimote and extension controllers public: WiimoteState p_WiimoteState; /// <param name="ws">Wiimote state</param> public: WiimoteChangedEventArgs(WiimoteState wss)
|
|
MfG Marschal
__________________
╔══════════════════════════════════════════════════════════════════════╗
║ABI 2010 DV-LK (geschafft) + 19.03 Mathe-LK + 22.03 Deutsch Schriftl. + 24.03 Abgabe der besonderen Lernleistung.║
╚══════════════════════════════════════════════════════════════════════╝
Das ist ein Spaß...:)
" Gehirn: ein Organ, mit dem wir denken, daß wir denken. "
Ambrose Bierce
|
09.02.10, 20:47
|
#6 (permalink)
|
|
Mitglied Diamant
Registriert seit: Jun 2005
Beiträge: 5.917
|
AW: [.NET WinForms C++] Namespace-Erweiterung
Hi.
Zitat:
Zitat von Marschal
ich möchte eine Klasse Ableiten. Doch krieg ich die Fehlermeldung:
|
Code:
|
...Events.h(24) : error C2011: 'WiimoteLib::WiimoteExtensionChangedEventArgs': 'class' Typneudefinition
...wiimotelib.dll: Siehe Deklaration von 'WiimoteLib::WiimoteExtensionChangedEventArgs'
|
|
Das könnte wieder ein include Problem sein.
Zitat:
Zitat von Marschal
@deepthroat: Übrigends, warum ich "in anderen Namensräumen rumpfusche" ist, weil ich mich an einem Ähnlichen Beispiel orientiere, dieses ist jedoch in c# gestalltet.
|
Das ist kein Grund es überhaupt zu versuchen. Was spricht dagegen sich einfach einen eigenen Namen auszudenken?
Und warum willst du das überhaupt in C++/CLI machen? Gibt es dafür einen Grund?
Gruß
__________________
.:Mitglied des 1. offiziellen Sven Uwe Fan-Clubs:.
|
09.02.10, 20:59
|
#7 (permalink)
|
|
Großer Enumerator
Registriert seit: May 2008
Ort: Lohfelden (bei Kassel)
Beiträge: 293
Renommee-Modifikator: 6 
|
AW: [.NET WinForms C++] Namespace-Erweiterung
Nein es gibt eigentlich keinen grund C++ mit CLI zu verwenden, aber ich find C++ allgemein eine schöne Sprache, auch wen C++ und C++/CLR auser dem Namen und zwei drei Systax Sachen nix gemeinsam haben, ne keine Ahnung, gibt keinen Grund.
Ich schätze mal du würdest mir wahrscheinlich auch C# ans Herz legen, wenn ich mit einer managed DLL arbeite 
__________________
╔══════════════════════════════════════════════════════════════════════╗
║ABI 2010 DV-LK (geschafft) + 19.03 Mathe-LK + 22.03 Deutsch Schriftl. + 24.03 Abgabe der besonderen Lernleistung.║
╚══════════════════════════════════════════════════════════════════════╝
Das ist ein Spaß...:)
" Gehirn: ein Organ, mit dem wir denken, daß wir denken. "
Ambrose Bierce
|
10.02.10, 08:52
|
#8 (permalink)
|
|
Mitglied Diamant
Registriert seit: Jun 2005
Beiträge: 5.917
|
AW: [.NET WinForms C++] Namespace-Erweiterung
Zitat:
Zitat von Marschal
Nein es gibt eigentlich keinen grund C++ mit CLI zu verwenden, aber ich find C++ allgemein eine schöne Sprache
|
Ehrlich?! Naja, es gibt schönere / elegantere Sprachen.
Zitat:
Zitat von Marschal
Ich schätze mal du würdest mir wahrscheinlich auch C# ans Herz legen, wenn ich mit einer managed DLL arbeite 
|
Ja, aber nicht nur dann. Man sollte die passende Sprache für ein Problem wählen. C++ bzw. C++/CLI sind nur unter bestimmten Bedingungen sinnvoll. Da du sowieso .NET hast, würde ich z.B. C# verwenden. Die Sprache ist klarer, bietet so angenehme Dinge wie LINQ und IntelliSense funktioniert meistens auch richtig (nicht so wie mit C++).
Gruß
__________________
.:Mitglied des 1. offiziellen Sven Uwe Fan-Clubs:.
|
10.02.10, 09:06
|
#9 (permalink)
|
|
Großer Enumerator
Registriert seit: May 2008
Ort: Lohfelden (bei Kassel)
Beiträge: 293
Renommee-Modifikator: 6 
|
AW: [.NET WinForms C++] Namespace-Erweiterung
S****se  Dan werd ich einfach meine GUI übernehmen, und eben das ganze in C# aufbauen
Ich hätte von Anfang an auf nen Kumpel hören sollen:P Der meinte das selbe
Zu c# findet man auch deutlich mehr im Netz als zu C++/CLI
Aus Interesse, wofür biete sich den c++/cli "besser" an? Ist es theoretisch nicht egal welche Sprache ich mit CLR verwende? ist der Sinn des .NET nicht die Sprachen-unabhängige-Programmierung; wenn ich mich so ausdrücken darf?
Wenn du gute Links zu diesem Thema kennst wäre ich sehr dankbar, habe zwar den Wiki Artikel gelesen, aber wie es aussieht ist das immer noch nicht ausreichen
MfG
__________________
╔══════════════════════════════════════════════════════════════════════╗
║ABI 2010 DV-LK (geschafft) + 19.03 Mathe-LK + 22.03 Deutsch Schriftl. + 24.03 Abgabe der besonderen Lernleistung.║
╚══════════════════════════════════════════════════════════════════════╝
Das ist ein Spaß...:)
" Gehirn: ein Organ, mit dem wir denken, daß wir denken. "
Ambrose Bierce
|
10.02.10, 09:32
|
#10 (permalink)
|
|
Mitglied Diamant
Registriert seit: Jun 2005
Beiträge: 5.917
|
AW: [.NET WinForms C++] Namespace-Erweiterung
Zitat:
Zitat von Marschal
Aus Interesse, wofür biete sich den c++/cli "besser" an? Ist es theoretisch nicht egal welche Sprache ich mit CLR verwende? ist der Sinn des .NET nicht die Sprachen-unabhängige-Programmierung; wenn ich mich so ausdrücken darf?
|
C++ ist generell eine maschinennahe Sprache.
Und es ist die einzige Sprache des .NET Universums dessen Compiler nativen Code erzeugen kann und mit der man nativen/unmanaged C++ Code in managed Code nach dem IJW (it just works) Prinzip nutzen kann ohne das man P/Invoke oder COM verwenden muss.
Wenn man also alten Code hat, den man in .NET nutzen möchte, oder aus Effizienzgründen "handoptimierten" Code schreiben möchte oder einfach native Bibliotheken nutzen möchte (ohne P/Invoke etc.) dann wäre C++/CLI z.B. sinnvoll.
http://www.functionx.com/cppcli/index.htm
http://blogs.msdn.com/jolson/archive...-or-c-cli.aspx
Gruß
__________________
.:Mitglied des 1. offiziellen Sven Uwe Fan-Clubs:.
|
|
| Themen-Optionen |
|
|
| Ansicht |
Linear-Darstellung
|
|
 |
|
»
Neue Tutorials
|
 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
»
Letzte News
|
 |
|
|
|
|
|
|
|
|
|
|
»
Tools
|
 |
|
|
|
|
|
»
Neue Links
|
 |
|
|
|
|
(Cinema 4D-Objekte)
|
|
(Cinema 4D-Tutorials)
|
|
(Cinema 4D-Tutorials)
|
|
(Cinema 4D-Tutorials)
|
|
(Cinema 4D-Tutorials)
|
|
»
Jobs @ tutorials.de
|
 |
|
|
|
|
|
|
|
|
|
|