Neue Antwort schreiben 
 
Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
[VC++] C# Internal in C++... habs immer noch nicht verstanden
PacMani
Unregistered

 
Beitrag #1
[VC++] C# Internal in C++... habs immer noch nicht verstanden
Hallo zusammen,

eine Frage, die mir die Internetsuche nicht einleuchtend erklären konnte.

Wie setzt man C# "internal" in C++ um?

Ich verbessere momentan die Datenkapselung eines meiner Projekte und wollte nicht mehr allzu viele Klassen als public in die DLL exportieren, weil diese Klassen nur aus anderen Klassen innerhalb der DLL genutzt werden sollen - nicht von externen Programmen. Folgendes Beispiel mit Wunsch-Zugriffsoperatoren:

Code:
Public Application

Internal AudioManager
    Internal GetAdapterCount()
    Private GetAdapterCountCallback()
Erläuterung der Klassen / Methoden und ihrer Aufgaben:
Application: Diese Hauptklasse ist die einzige wirkliche public-Klasse. Von ihr wird in externen Programmen eine Instanz erzeugt.
AudioManager: Diese Klasse soll nur "innerhalb" der DLL sichtbar sein. Eine Instanz hiervon erstellt nämlich die Application-Klasse. Von außen sollen aber keine Instanzen erzeugbar sein, weder die Klasse überhaupt sichtbar.
GetAdapterCount(): Eine Methode, die von Application benötigt wird, um herauszufinden, wieviele Audio-Geräte im Rechner vorhanden sind.
GetAdapterCountCallback(): Eine Methode, die privat innerhalb des Audio-Managers aufgerufen wird. Für Application oder gar externe Anwendungen soll sie nicht sichtbar sein.

Ich hoffe, ich konnte so ein wenig erklären, was ich vorhabe: Klassen, die eben nur innerhalb der DLL sichtbar sind und nicht nach außen hin.

Wie kann ich sowas am besten machen? Momentan habe ich alle Methoden der AudioManager-Klasse private deklariert und dann Application als Friend-Class erwähnt. Allerdings hätte Application dann immer noch Zugriff auf GetAdapterCountCallback(). Und der AudioManager wäre nach außen hin sichtbar.
08.07.2011 18:29
Diese Nachricht in einer Antwort zitieren
niwax Offline
Hardcore-Coder

Beiträge: 3.822
Registriert seit: Dec 2009
Beitrag #2
[VC++] C# Internal in C++... habs immer noch nicht verstanden
Solange das im gleichen Namespace stattfindet, ist internal so ziemlich das gleiche wie private: Difference between internal and private
Du darfst nur keine Klasse innerhalb einer anderen deklarieren.

http://msdn.microsoft.com/de-de/library/...80%29.aspx schrieb:internal:
Der Zugriff ist auf die aktuelle Assembly begrenzt.

private:
Der Zugriff ist auf den enthaltenden Typ begrenzt.
Wenn die Assembly bzw. der Hauptnamespace gleichzeitig der enthaltende Typ ist, gibts keinen Unterschied


(Dieser Beitrag wurde zuletzt bearbeitet: 08.07.2011 19:55 von niwax.)
08.07.2011 19:53
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
gandro Offline
Quälgeist

Beiträge: 8.950
Registriert seit: Jul 2008
Beitrag #3
[VC++] C# Internal in C++... habs immer noch nicht verstanden
Wenn ich Pac-Man richtig verstehe, weiss er was internal tut, viel mehr will er das entsprechende Äquivalent in C++.

Ich habe wenig Ahnung von .NET Assembly und wenig von C++, aber so wie es scheint, verwendet selbst VC++ für C++-Binärdateien ein anderes System, ist ja letztendlich auch kein .NET Bytecode es gibt in C++ also gar keine direkte Möglichkeit, die Sichtbarkeit eines Symbols einzuschränken - du musst mit Headerfiles und dem Linker arbeiten. Aber keine Ahnung wie das bei MSVC++ geht.

C# internal == public C++?
C#: Can i write “private:” or “protected:” regions like in C++?

Wobei ich keinen Grund sehe, warum man das unbedingt will. Falls jemand nen Unsinn mit dem Binärcode anstellen will, hält ihn auch "Internal" nicht davon ab.
08.07.2011 21:14
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
niwax Offline
Hardcore-Coder

Beiträge: 3.822
Registriert seit: Dec 2009
Beitrag #4
[VC++] C# Internal in C++... habs immer noch nicht verstanden
gandro schrieb:  Wobei ich keinen Grund sehe, warum man das unbedingt will. Falls jemand nen Unsinn mit dem Binärcode anstellen will, hält ihn auch "Internal" nicht davon ab.
Es ist aber sauberer, dem User die Funktionen zu geben, die er gebrauchen kann/soll als alles offenzulegen.


08.07.2011 21:19
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
gandro Offline
Quälgeist

Beiträge: 8.950
Registriert seit: Jul 2008
Beitrag #5
[VC++] C# Internal in C++... habs immer noch nicht verstanden
niwax schrieb:  
gandro schrieb:  Wobei ich keinen Grund sehe, warum man das unbedingt will. Falls jemand nen Unsinn mit dem Binärcode anstellen will, hält ihn auch "Internal" nicht davon ab.
Es ist aber sauberer, dem User die Funktionen zu geben, die er gebrauchen kann/soll als alles offenzulegen.
Dafür gibts API-Dokumentation.
08.07.2011 21:20
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
niwax Offline
Hardcore-Coder

Beiträge: 3.822
Registriert seit: Dec 2009
Beitrag #6
[VC++] C# Internal in C++... habs immer noch nicht verstanden
gandro schrieb:  
niwax schrieb:  
gandro schrieb:  Wobei ich keinen Grund sehe, warum man das unbedingt will. Falls jemand nen Unsinn mit dem Binärcode anstellen will, hält ihn auch "Internal" nicht davon ab.
Es ist aber sauberer, dem User die Funktionen zu geben, die er gebrauchen kann/soll als alles offenzulegen.
Dafür gibts API-Dokumentation.
Und die offenen Funktionen stimmen im Optimalfall mit der Dokumentation überein.


08.07.2011 21:33
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
PacMani
Unregistered

 
Beitrag #7
[VC++] C# Internal in C++... habs immer noch nicht verstanden
Das Problem ist nur, dass die Methoden, die ich intern in verschiedenen Klassen verwende, nicht für Dritte sichtbar sein sollen... naja, ich denke, ich nehme da das etwas Spaghetticode-wirkende friend class-Konzept :/
Prio. A ist bei diesem Projekt nämlich, dass der Nutzer der DLL wirklich nur das sieht, um jetzt z.B. einen Sound abzuspielen, und nicht Hilfsmethoden etc., die intern verwendet werden.
08.07.2011 22:21
Diese Nachricht in einer Antwort zitieren
friedrichheinze Offline
...und Kondensatoren.

Beiträge: 2.838
Registriert seit: Jul 2008
Beitrag #8
[VC++] C# Internal in C++... habs immer noch nicht verstanden
Und warum geht private/protected nicht für deine Zwecke?
09.07.2011 09:58
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
PacMani
Unregistered

 
Beitrag #9
[VC++] C# Internal in C++... habs immer noch nicht verstanden
Hatte ich im Eingangspost eigentlich erwähnt. Innerhalb der DLL sollen bestimmte Methoden von unterschiedlichen Klassen sichtbar sein, aber außerhalb der DLL, also in externen Programmen die die DLL nur nutzen, sollen sie nicht sichtbar sein.
09.07.2011 11:02
Diese Nachricht in einer Antwort zitieren
niwax Offline
Hardcore-Coder

Beiträge: 3.822
Registriert seit: Dec 2009
Beitrag #10
[VC++] C# Internal in C++... habs immer noch nicht verstanden
Oder du verlagerst alle in der Dll sichtbaren Funktionen in eine DLL-Private Klasse.


09.07.2011 11:17
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
Neue Antwort schreiben 


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste