Laden...

Forenbeiträge von wucher wichtel Ingesamt 18 Beiträge

18.06.2008 - 15:58 Uhr

Hi zusammen,

ich bräuchte Hilfe in Bezug auf XAML. Gibt es etwas vergleichbares für XAML wie SELFHTML für HTML?

Ich schaue mir gerade XAML etwas an und bei jeder Eigenschaft oder jedem Attribut, das ich noch nicht kenne will ich nachschauen. Aber auf MSDN finde ich gar nichts. Entweder die Suche ist kacke, oder ich bin zu blöd 😉 Bspw. wollte ich nachschauen wofür <Button.Template> steht: http://search.msdn.microsoft.com/?query=xaml%20Button.Template&locale=en-us&lang=de-DE&ac=8.

Wie habt ihr als Anfänger euch beholfen?

Viele Grüße!

13.06.2008 - 16:08 Uhr

Hi!

Ich habe absichtlich etwas falsch gemacht. Ansonsten wäre ja auch keine Exception geworfen worden. Und trotzdem ist die Meldung der Exception "Der Vorgang wurde erfolgreich beendet."

Ein Beispiel habe ich vorher gepostet, wurde aber wegen Wegdriften vom Thema wieder gelöscht.
Vielleicht kann mir trotzdem jemand weiterhelfen.

Vielen Dank und viele Grüße,
Lukas

13.06.2008 - 14:36 Uhr

Hi 🙂

Man könnte auch ein Marshal.ThrowExceptionForHR(errorCode) machen. Das erzeugt eine Exception aus dem angegebenen Fehlercode.

Da ist bei mir überhaupt nichts passiert?!

Unter C (nicht C++) gibt es leider keine Exceptions. Die Rückgabe von Funktionen ist meißt ein Int, der den Fehler (Fehlercode) zurück gibt. Rückgabe ungleich 0 war nicht erfolgreich. Die Fehlerbeschreibung zu einem Code bekommst du mit der Api-Funktion FormatMessage aus Kernel32.dll. Das ganze kannst du in eine eigene Exception konvertieren und mit throw anschließedn werfen

Das habe ich versucht. Mein Code dazu sieht so aus:

[DllImport("Kernel32.dll")]
        private static extern uint FormatMessage(uint dwFlags, IntPtr lpSource, uint dwMessageId, uint dwLanguageId, ref IntPtr lpBuffer, uint nSize, IntPtr pArguments);

        const uint FORMAT_MESSAGE_ALLOCATE_BUFFER = 0x00000100;
        const uint FORMAT_MESSAGE_IGNORE_INSERTS = 0x00000200;
        const uint FORMAT_MESSAGE_FROM_SYSTEM = 0x00001000;
        int nLastError = Marshal.GetLastWin32Error();

        public static string ReturnErrorStr(int errCode)
        {
            if (errCode == 0)
            {
                return "";
            }
            const uint FORMAT_MESSAGE_ALLOCATE_BUFFER = 0x00000100;
            const uint FORMAT_MESSAGE_IGNORE_INSERTS = 0x00000200;
            const uint FORMAT_MESSAGE_FROM_SYSTEM = 0x00001000;

            int nLastError = Marshal.GetLastWin32Error();

            IntPtr lpMsgBuf = IntPtr.Zero;

            uint dwChars = FormatMessage(
                FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
                IntPtr.Zero,
                (uint)nLastError,
                0,
                ref lpMsgBuf,
                0,
                IntPtr.Zero);

            string sRet = Marshal.PtrToStringAnsi(lpMsgBuf);
            throw (new Exception(sRet));
        }

Den Code habe ich von pinvoke.net und habe ihn an meine Bedürfnisse angepasst. Die Exception wird auch geworfen, allerdings enthält der Text der Exception folgendes: "Der Vorgang wurde erfolgreich beendet." Das kann ja eigentlich nicht sein, oder? 🙂

Ist halt einfach nur Assembly wo alle Windows-Api Funktionen in einer Klassen stehen. In deinem Programm verwendest du nurnoch die Wrapper-Assembly statt dich ständig mit der API rumschlagen zu müssen. [...]

Okay, das macht Sinn 🙂 soetwas werde ich schreiben.

Man kann sich auch die Sourcen vom .NET Framework schnappen und die Datei Win32Native.cs als Quelle benutzen. Da sind ziemlich viele Win32 API Aufrufe enthalten mit deren Structs.

Wo finde ich die Sourcen? Muss ich die von Microsoft herunterladen? Oder habe ich sie auf meinem Computer (gefunden wurde nichts; sind die Sourcen schon kompiliert, oder?)?

Vielen Dank und viele Grüße!

13.06.2008 - 13:13 Uhr

Hi!

Vielen Dank für deine ausführliche Hilfe! Richtig cool, wie viel Hintergrundwissen es dazu gibt (und ich glaube dass das nirgends (so gut) beschrieben ist, wie hier).

Ich versuche mir mal soetwas zu schreiben. Gibt es noch eine genauere Erklärung, was eine Wrapper-Assembly ist, als diese hier: http://forum.chip.de/c-c/wrapper-klasse-433899.html ?

Vielen Dank an euch!

13.06.2008 - 11:56 Uhr

Hi!

@kleines_eichhoernchen:
Ich habe Code kopiert und er funktioniert. Jetzt kann ich mich an's Verstehen machen. Vielen Dank dafür! Ohne funktionierenden Code fällt es mir schwer das ganze zu verstehen.

@Khalid:
Vielen Dank für diesen Hinweis. Ich hab gedacht es würde vlt. über Exceptions funktionieren.

Danke für eure Hilfe!!!
Viele Grüße

13.06.2008 - 08:34 Uhr

[EDIT]Abgeteilt von Windows API-Programmierung (generelles API-Problem?)[/EDIT]

Hi!

Ich habe jetzt versucht den Computer herunter zu fahren. Allerdings tut sich überhaupt nichts. Kann mir jemand sagen warum das so ist? Andere Dinge funktionieren (CD-Laufwerk ausfahren usw.).

Hier ist der Code:


        [DllImport("user32.dll")]
        static extern bool ExitWindowsEx(uint uFlags, uint dwReason);
        
        /// <summary>
        /// Shutdown
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btn_doshutdown_Click(object sender, EventArgs e)
        {
            try
            {
                ExitWindowsEx(0x01, 0x00000000);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

Ich habe es in einen try-catch-Block geschrieben, um eventuelle Fehler abzufangen. Aber es passiert nichts.

Woran liegt das?

Wäre wirklich toll, wenn mir jemand helfen könnte 🙂 Danke!

viele grüße

12.06.2008 - 16:41 Uhr

okay, jetzt ist alles klar 🙂

morgen versuche ich mich noch weiter am Programmieren.

Danke schön!!

12.06.2008 - 13:09 Uhr

Okay, danke schön!

Kann man das irgendwie rausbekommen, dass die Funktion anders heißt oder muss man das wissen? 🙂

12.06.2008 - 11:48 Uhr

Hi!

Vielen vielen Dank für eure Antworten!
Ich glaube ich habe das meiste verstanden 🙂)

Eine Frage bleibt allerdings: Ich finde keine Beschreibung zu ShutDown auf MSDN. Warum? In der Liste der API-Befehle steht unter 'S' nichts von ShutDown. Was mache ich in diesem Fall?

Und was meinst du, Andreas, mit einer Struktur (bei TODO)?

Nochmals vielen Dank für alles!

12.06.2008 - 10:42 Uhr

Hi!

Vielen Dank für deine Antwort!

Wo finde ich die Header-Dateien? Ich habe gerade die Windowssuche laufen lassen, aber er hat nichts gefunden. Die 'dll' findet er im system32-Ordner.

viele Grüße

12.06.2008 - 10:19 Uhr

Hallo zusammen!

Ich habe eine Frage zum Thema API-Programmierung: Ich wollte etwas zur API-Programmierung unter .NET lernen. Allerdings funktioniert das nicht so, wie ich mir das vorgestellt habe 🙂

Auf der Seite http://www.pinvoke.net/ werden die meisten (?) Windows API-Befehle aufgezählt und manche haben eine genaue Beschreibung dabei.

Bsp1:
[DllImport("user32.dll", SetLastError = true)]
static extern void EndTask(IntPtr hWnd);

Bei diesem Beispiel ist das Problem, dass ich keine Ahnung habe, was ich als Übergabeparameter übergeben soll (was ist 'IntPtr hWnd' und was sind gültige Werte dafür?).

Bsp2:
[DllImport("winmm.dll")]
static extern Int32 mciSendString(String command,
StringBuilder buffer, Int32 bufferSize, IntPtr hwndCallback);

Hier gibt es Beispiel-Code. Das bedeutet ich habe für 2 Beispiele gültige Werte für die Übergabeparameter. Aber es gibt doch sicher noch mehr, oder?

Bsp3:
[DllImport("advapi32.dll", SetLastError=true)]
static extern TODO ShutDown(TODO);

Hier bekomme ich nicht mal gesagt, wie viele (bzw. welche) Parameter ich übergeben muss.

Meine Frage lautet: Wie kann ich herausbekommen, was für Parameter ich an die API-Befehle übergeben muss, damit das ganze funktioniert?

Vielen Dank für hilfreiche Antworten!
Viele Grüße

18.12.2007 - 21:42 Uhr

8o

Oh... Kann man den Thread bitte wieder löschen? Tut mir leid.

Vielen Dank für den Link. Ich suche mir die Infos dann zusammen.

18.12.2007 - 21:13 Uhr

Hallo zusammen,

ich habe eine Frage und zwar: Ein User startet eine Anwendung (dabei geht das Hauptfenster auf). Aus diesem Hauptfenster wird dann ein neues Fenster geöffnet, in dem sich eine Eingabemaske befindet. Die eingegebenen Daten speichere ich als Objekt. Die Klasse des Objekts habe ich selber definiert.
Könntet ihr mir bitte sagen, wie ich nun die Daten, die in diesem Objekt gespeichert habe an das Hauptfenster zurückgeben kann? Ich lese mir auch gerne ein Tutorial dazu durch, wenn ihr mir nur sagt, wo das beschrieben ist.
Ich bin noch nicht so der Crack, was C# angeht. Ich habe schon per Google gesucht und auch im Openbook von GalileoComputing nachgeschaut und leider nichts gefunden.

Vielen Dank für eure Hilfe!

23.10.2007 - 18:51 Uhr

Daran bin ich leider auch schon öfters gescheitert... 😦(

Hat niemand einfach einen kleinen Codeabschnitt, mit dem man eine Verbindung zu einem FTP-Server herstellen kann? Irgendwie kriege ich das nicht hin.

19.10.2007 - 21:29 Uhr

Hallo!

Danke für deine Antwort. Leider funktioniert es immer noch nicht. Die Fehlermeldung bleibt die gleiche

using System;
using System.Net;
using System.Net.Sockets;
using System.Text;

namespace MyCsharpFTP
{
    class Program
    {
        static void Main(string[] args)
        {
            string remoteUri = "ftp://ftp.adobe.com";
            string fileName = "signon.txt", myStringWebResource = null;
            // Create a new WebClient instance.
            WebClient myWebClient = new WebClient();
            // Concatenate the domain with the Web resource filename.
            myStringWebResource = remoteUri + "/" + fileName;
            Console.WriteLine("Downloading File \"{0}\" from \"{1}\" .......\n\n", fileName, myStringWebResource);
            // Download the Web resource and save it into the current filesystem folder.
            myWebClient.DownloadFile(myStringWebResource, fileName); // Hier gibts den Fehler
            Console.WriteLine("Successfully Downloaded File \"{0}\" from \"{1}\"", fileName, myStringWebResource);
            Console.WriteLine("\nDownloaded file saved in the following file system folder:\n\t");
        }
    }
}

Danke für eure Hilfe und viele Grüße, ww

19.10.2007 - 20:16 Uhr

Hi!

habe leider jetzt länger keine Zeit gehabt daran weiter zu arbeiten.

das habe ich übersehen bzw. nicht geschnallt was der Code macht. Jetzt habe ich mich eingelesen und habe auch versucht das ganze nachzuvollziehen. Ich habe den Quelltext von hier kopiert.


using System;
using System.Net;
using System.Net.Sockets;
using System.Text;

namespace MyCsharpFTP
{
    class Program
    {
        static void Main(string[] args)
        {
            string remoteUri = "ftp://ftp.adobe.com/";
            string fileName = "signon.txt", myStringWebResource = null;
            // Create a new WebClient instance.
            WebClient myWebClient = new WebClient();
            // Concatenate the domain with the Web resource filename.
            myStringWebResource = remoteUri + fileName;
            Console.WriteLine("Downloading File \"{0}\" from \"{1}\" .......\n\n", fileName, myStringWebResource);
            // Download the Web resource and save it into the current filesystem folder.
            myWebClient.DownloadFile(myStringWebResource, fileName);
            Console.WriteLine("Successfully Downloaded File \"{0}\" from \"{1}\"", fileName, myStringWebResource);
            Console.WriteLine("\nDownloaded file saved in the following file system folder:\n\t");
        }
    }
}

So sieht das ganze dann aus. Leider bekomme ich dann eine WebException: "Der Remotename konnte nicht aufgelöst werden: 'ftp.adobe.com'" (ftp.adobe.com habe ich einfach mal so gewählt)

Könnt ihr mir bitte sagen wo das Problem ist? Danke für eure Hilfe!

viele Grüße, ww

13.10.2007 - 18:19 Uhr

Hi roeb,

hab einmal google besucht und gleich was gefunden. Sind ne Menge Examples für verschiedene Situationen und alles C# für FTP Verbindungen 🙂

Ich habe suche eher nach einer Anleitung, wie ich soetwas selber schreiben kann.


>

Da sollte ich eine Datei herunterladen und diese dann installieren, damit ich dann Klassen zur Verfügung gestellt bekomme.


>

Da muss ich mich erst registrieren, damit ich an die entsprechenden Dateien komme. Und dann ist es wieder keine Erklärung wie man das selber schreiben kann, sondern eine komplette Klasse 🙁

Wenn man sich dann durch zwei ewig lange Dateien gekämpft hat, dann findet man irgendwann diesen Code (ich poste ihn mal, dass andere nicht auch solange suchen müssen):

public void Connect()
		{
			if (server == null)
				throw new Exception("No server has been set.");
			if (user == null)
				throw new Exception("No username has been set.");

			if (main_sock != null)
				if (main_sock.Connected)
					return;

			main_sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
			main_ipEndPoint = new IPEndPoint(Dns.GetHostByName(server).AddressList[0], port);
			
			try
			{
				main_sock.Connect(main_ipEndPoint);	
			}
			catch(Exception ex)
			{
				throw new Exception(ex.Message);
			}

			ReadResponse();
			if (response != 220)
				Fail();

			SendCommand("USER " + user);
			ReadResponse();

			switch(response)
			{
				case 331:
					if (pass == null)
					{
						Disconnect();
						throw new Exception("No password has been set.");
					}
					SendCommand("PASS " + pass);
					ReadResponse();
					if (response != 230)
						Fail();
					break;
				case 230:
					break;
			}
			
			return;
		}

Ist zwar nicht ganz so wie ich es mir vorgestellt habe, aber wenn ich jetzt bei dem Code etwas nicht verstehe, dann kann ich mir selber weiterhelfen 🙂

Danke für deine Hilfe. Bis dann, viele Grüße, ww

13.10.2007 - 17:12 Uhr

Hallo zusammen,

ich würde gerne mit C# einen FTP-Client programmieren. Das Problem ist, dass ich keinerlei Ahnung habe, wie ich eine Verbindung zu einem Server aufbaue 🙁 Alles googeln hat mir nichts gebracht. Habt ihr ein Tutorial oder könnt ihr mir das erklären? 🙂

Vielen Dank & ebenso viele Grüße, wucher wichtel