Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Probleme mit Typ/Namespace/DLLImport
-acid-
myCSharp.de - Member



Dabei seit:
Beiträge: 885
Herkunft: Hessen

Themenstarter:

Probleme mit Typ/Namespace/DLLImport

beantworten | zitieren | melden

Hallo,

ich binde hiermit die shell32.dll ein und habe mit der nächsten Zeile Probleme. Der Namespace LPCVOID konnte nicht gefunden werden...

Hier der Code:
[DllImport("shell32.dll")]
public static void SHChangeNotify(long wEventId, uint uFlags, LPCVOID dwItem1, LPCVOID dwItem2);

Meine Vermutung ist, dass der Namspace fehlt aber ich weiss nicht welchen ich einbinden muss. Nur damit ihr wisst was ich vorhabe:

Ich möchte gerne die Funktion SHChangeNotify ausführen (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/shell/reference/functions/shchangenotify.asp).
private Nachricht | Beiträge des Benutzers
Noodles
myCSharp.de - Experte



Dabei seit:
Beiträge: 4.644
Herkunft: Leipzig

beantworten | zitieren | melden

[DllImport("shell32.dll")]
public static extern void SHChangeNotify(long wEventId, uint uFlags, IntPtr dwItem1, IntPtr dwItem2);
private Nachricht | Beiträge des Benutzers
-acid-
myCSharp.de - Member



Dabei seit:
Beiträge: 885
Herkunft: Hessen

Themenstarter:

beantworten | zitieren | melden

kurz und bündig *g* danke.
private Nachricht | Beiträge des Benutzers
-acid-
myCSharp.de - Member



Dabei seit:
Beiträge: 885
Herkunft: Hessen

Themenstarter:

beantworten | zitieren | melden

würde halt auch gerne wissen was das extern und IntPtr soll. einfach um was zu lernen.
private Nachricht | Beiträge des Benutzers
Noodles
myCSharp.de - Experte



Dabei seit:
Beiträge: 4.644
Herkunft: Leipzig

beantworten | zitieren | melden

Ich zeige Dir mal die Zitate der SDK:
Zitat
Der Typ IntPtr ist als ganzzahliger Typ mit plattformabhängiger Größe konzipiert. Das heißt, dass es sich bei 32-Bit-Hardware und 32-Bit-Betriebssystemen i. d. R. um eine 32-Bit-Instanz dieses Typ handelt und bei 64-Bit-Hardware und 64-Bit-Betriebssystemen um eine 64-Bit-Instanz des Typs.

Der Typ IntPtr kann von Sprachen, die Zeiger unterstützen, verwendet werden sowie als gemeinsame Methode zur Darstellung von Verweisen auf Daten zwischen Sprachen, die Zeiger unterstützen, und solchen, die keine Zeiger unterstützen.

IntPtr-Objekte können auch dazu verwendet werden, Handles zu enthalten. Instanzen von IntPtr werden z. B. häufig in der System.IO.FileStream-Klasse verwendet, damit sie Dateihandles enthalten.

Im Gegensatz zum Typ UIntPtr ist der Typ IntPtr CLS-kompatibel. In der Common Language Runtime wird nur der IntPtr-Typ verwendet. Der UIntPtr-Typ wird hauptsächlich aus Gründen der Systemsymmetrie zum IntPtr-Typ bereitgestellt.
Zitat
In einer Methodendeklaration kann mit dem extern-Modifizierer angegeben werden, dass die Methode extern implementiert wird. Der extern-Modifizierer wird häufig mit dem DllImport-Attribut verwendet.

Hoffe es hilft Dir.
private Nachricht | Beiträge des Benutzers
-acid-
myCSharp.de - Member



Dabei seit:
Beiträge: 885
Herkunft: Hessen

Themenstarter:

beantworten | zitieren | melden

@Noodles:

Ich komme leider nicht weiter, deswegen nochmal mein Code:
[DllImport("shell32.dll")]
public static extern void SHChangeNotify(long wEventId, uint uFlags, IntPtr dwItem1, IntPtr dwItem2);

Die Funktion wird bei nem Event ausgelöst:
SHChangeNotify(SHCNE_ASSOCCHANGED,SHCNF_IDLIST,null,null);

Ich ändere vorher die Datei-Endung und will das System dadurch "informieren". Leider kommt die Meldung das die ersten 2 Parameter der Funktion nicht in der Klasse bestehen. Habe auch schon versucht Konsten draus zu machen doch leider weiss ich nicht was diese potentiellen Konstaten dann für einen Wert haben müssen. Also entweder habe ich etwas falsch verstanden oder nen Code-Fehler gemacht... Vielleicht kann mir ja jemand weitehelfen.

Danke schonmal.
private Nachricht | Beiträge des Benutzers
Noodles
myCSharp.de - Experte



Dabei seit:
Beiträge: 4.644
Herkunft: Leipzig

beantworten | zitieren | melden

Scham mal hier, vielleicht hilft es Dir.
private Nachricht | Beiträge des Benutzers
Maxigraf
myCSharp.de - Member



Dabei seit:
Beiträge: 38

beantworten | zitieren | melden

der fehler besagt doch lediglich, dass die ersten 2 paramater, also in dem fall SHCNE_ASSOCHANGED und SHCNF_IDLIST nicht definiert sind...
du solltest also vorhin mit den 2 zeilen
logn SHCNE_ASSOCHANGED;
uint SHCNF_IDLIST;
die beiden variablen definiern...
dann könnts gehn
wenns n anderes problem war, dann sorry für meine unfähigkeit ^^
private Nachricht | Beiträge des Benutzers
-acid-
myCSharp.de - Member



Dabei seit:
Beiträge: 885
Herkunft: Hessen

Themenstarter:

beantworten | zitieren | melden

Also es funktioniert. Für alle die es interessiert. Hier der Code um die Registry zu "informieren":
[DllImport("shell32.dll")]
private static extern void SHChangeNotify(int wEventId, uint uFlags, IntPtr dwItem1, IntPtr dwItem2);
private const int SHCNE_ASSOCCHANGED = 0x08000000;
private const int SHCNF_IDLIST = 0;

Auslösen der Funktion zb. durch ein Event:
SHChangeNotify(SHCNE_ASSOCCHANGED,SHCNF_IDLIST,IntPtr.Zero,IntPtr.Zero);

Danke an alle.
private Nachricht | Beiträge des Benutzers