Laden...

Forenbeiträge von B3nj Ingesamt 242 Beiträge

19.08.2011 - 16:51 Uhr

Hallo,

Danke für die Antwort. Funktionieren tut es aber leider nicht, vor allem darf ich den stdin nicht schliessen, da die Kommunikation dynamisch ist. Dafür habe ich eine andere einfache Lösung gefunden:

C equivalent of autoflush?

bzw.

setvbuf(stdout, NULL, _IONBF, 0)

Das bewirkt, dass stdout nicht gebuffert wird und dadurch funktioniert es. Natürlich funktioniert das nur wenn man das Zielprogramm beeinflussen kann, was ich glücklicherweise bis zu einem gewissen Grad kann.

Da stellt sich mir aber auch noch die Frage wie 'cmd.exe' das macht. Offensichtlich sind die Ausgaben erst mal in einem Buffer (welcher auch mit \n oder ähnlichem nicht geleert wird). Leert 'cmd.exe' den stdout-Buffer der aufzurufenden Programme selbst oder wie kommt das an den Inhalt? Darf ein programm überhaupt einen Filebuffer eines anderen Programmes einfach so flushen?

Es interessiert mich zwar, aber unbedingt wissen muss ich es nicht. =)

🙂Danke für die Hilfe. & schönes Wochenende

mfG

18.08.2011 - 22:20 Uhr

Sorry für den Push, aber ich beisse mir noch immer die Zähne an dem Thema aus. Vielleicht suche ich viel zu weit weg?...

Das zuletzt genannte OSS-Projekt hat mir leider auch nicht wirklich weitergeholfen...

😦Naja, falls jemand ne andere einfache Lib kennt (c, c++, whatever) mit der ich einen Wrapper schreiben kann den ich dann in C# nutzen kann wäre ich auch schon zufrieden.

Einen weiteren push werde ich selbstverständlich nicht mehr machen.

Vielen Dank

mfG
b3nj

16.08.2011 - 22:22 Uhr

Hallo,

Ich habe eine exe-Datei, welche in C geschrieben ist. Dieses Programm ist Konsolenbasiert und stellt sowas wie ne primitive Shell zur Verfügung. Einfacher gesagt einige Kommandos. Diese Kommandos können Parameter und eine Ausgabe haben.

Ich möchte in C# nun einen (GUI-)Wrapper für das Ding schreiben.
Ich habe bereits sehr mit der Weiterleitung von StdErr/Out/In gekämpft. Das ganze habe ich mit der Process-Klasse versucht. Insofern ich nur stdout und stderr weitergeleitet habe ging das auch soweit, halt ohne input.

Als ich aber den Input auch weitergeleitet habe ging stderr/stout nicht mehr? Seltsamerweise funktioniert das alles ohne Probleme bei der "cmd.exe".

Bereits mit einem einfachen C-Tool, dass n'Endlosloop mit einem Echo der Eingabe hat gehts nicht mehr (Wieso auch immer??!).

Das Problem scheint bekannt zu sein:
Capture output of process synchronously (i.e. "when it happens")

Mit dem in diesem Thread verlinkten "ProcessRunner" habe ich das ganze für ein Test-Tool (Dummy-Ausgabe) hingekriegt. Jedoch nicht für mein Tool selbst.

In der Konsole "cmd.exe" kann ich das Tool problemlos ausführen. Wieso kann ich den Redirect aber nicht sauber machen?

Das ganze scheint komplizierter zu sein als es sich anhört? Die Problemstellung ist ja relativ einfach: stderr/out/in (in Echtzeit) weiterleiten.

Das Zieltool nutzt mehrere Threads und ich kann auch Einfluss darauf nehmen, falls da etwas geändert werden muss.

mfG
b3nj

-edit

Da die Beschreibung wahrscheinlich nicht optimal ist hier noch eine weitere Darstellung des Probelms.

Ein sinnloses Beispiel-Tool in C, das wahrscheinlich überhaupt nicht schön geschrieben ist:

#include <stdio.h>
#include <process.h>
#include <windows.h>

void __cdecl dummy_thread(void* dummy) {
  int cnt;
  for (cnt = 0;; cnt++) {
    printf("%4d  %4d\n", (int)GetCurrentThreadId(), cnt);
    Sleep(5000);
  }
}

int main() {
  int threads = 10;
  while (--threads) {
    _beginthread(dummy_thread, 0, NULL);
    printf("You typed '%c'.\n", fgetc(stdin));
  }
  printf("Stop typing!\n");
  dummy_thread(NULL);
  return 0;
}

Kompiliert habe ich es mit mingw. Auf jeden Fall enthält es Eingaben, Ausgaben und Threads.

Ein Beispiel-Code um die EIn und Ausgabe zu steuern, auch der ist nicht unbedingt schön, dafür aber sehr einfach:

        private static void PrcoessReader(Process p)
        {
            int readed;
            while ((readed = p.StandardOutput.Read()) > 0)
            {
                Console.Write((char)readed);
                Console.Out.Flush();
           }
        }
        
        static void Main(string[] args)
        {
            ProcessStartInfo startInfo = new ProcessStartInfo("a.exe");
            startInfo.RedirectStandardOutput = true;
            startInfo.RedirectStandardError = true;
            startInfo.RedirectStandardInput = true;
            startInfo.UseShellExecute = false;
            startInfo.CreateNoWindow = true;
            startInfo.ErrorDialog = true;
            Process process = new Process();
            process.StartInfo = startInfo;
            process.Start();
            new Thread(() => PrcoessReader(process)).Start();
            while (true)
            {
                process.StandardInput.WriteLine(Console.ReadLine());
                process.StandardInput.Flush();
                continue;
            }
            Console.ReadKey();
        }

Der funktioniert jedoch nicht.

Dann habe ich noch einen Anlauf-Versuch mit dem "ProcessRunner" gemacht:

        static void Main(string[] args)
        {
            ProcessRunner runner = new ProcessRunner("a.exe");
            runner.OutputReceived += (s, e) => 
                Console.Write(e.Data);
            runner.Start();
            while (true)
                runner.StandardInput.WriteLine(Console.ReadLine());
        }

Leider auch ohne Erfolg.

Wichtig ist noch, dass das ganze unter Windows XP laufen muss.

mfG

-edit 2-

Das quelloffene Programm Console für Windows, welches in C++ geschrieben ist verhält sich korrekt.

Nur leider bin ich in C++ nicht so der Hammer. Naja, ich versuche mal rauszufinden wies das macht. Bzw. was ich falsch mache.

Für Hilfe bin ich aber weiterhin offen und ich würde mich natürlich auch sehr freuen.

Vielen Dank.

mfG

01.02.2011 - 16:10 Uhr

Zum Crosspost: Der ist atsächlich von mir. Die Frage ist sehr speziell deshalb habe ich an zwei Stellen gefragt. Kann man mir übel nehmen und ist wie ich gerade gesehen habe auch nicht erlaubt. Ok, das ist mein Fehler.

Das mit den Listen ist auch gut zu wissen, aber ich habe auf Arrays abgezielt ja.

@MrSparkle:
Deine Erklärung ist schon mal gut. Naja, grundsätzlich geht es um (m)einen Lehrer der der Meinung ist, dass die physische Länge des Arrays entspricht und die logische der Anzahl an Feldern die exlizit zugewiesen wurden. Da habe ich ihm widersprochen und das hat ihm überhaupt (!) nicht gefallen.

Aber das klingt schonmal gut. Damit lässt sich argumentieren:-) Weil die Erklärung des Lehrers will mir einfach nicht in den Kopf. (Hinterfragen sollte ja nicht schlimm sein^^)

01.02.2011 - 11:41 Uhr

Hallo,

Letztens bin ich auf die Begriffe logische und physische Länge eines Arrays gestossen. Explizit auf C# .Net bezogen.

Die physische Arraylänge wird wohl die "Länge" des Arrays sein (.Length). Wie aber ist die logische definiert?

Eigentlich dachte ich, dass die logische Länge eines Arrays = die physische Länge ist (zumindest in C#). Jetzt aber habe ich gehört, dass die logische Länge die Anzahl der explizit definierten indizes ist. Das macht für mich in C oder ähnlichen Sprachen irgendwo noch Sinn, da hier die Werte in einem Array ja nicht vordefiniert sind, in C# jedoch schon (imho default(T)).

=)Google sagt dazu auch nicht viel, daher wende ich mich mal an euch.

mfG

26.11.2010 - 07:06 Uhr

Ok, der Wikipediaeintrag ist relativ gut.

Von wegen Prof fragen: Das habe ich auch versucht (per Mail) nachdem ich erfolglos einige Schüler gefragt habe. Der meint, dass hätte man in der Stunde besprochen und ansonsten steht es in jedem halbwegs guten Buch an erster Stelle. Wer nicht in der Stunde war ist selbst schuld. (er hats ein bisschen freundlicher geschrieben^^)

naja, ich hoffe mal, dass die frage nicht an der prüfung kommt. notfalls habe ich ja jetzt aber jede schwammige antwort noch eine begründung.

danke

25.11.2010 - 22:43 Uhr

da ich nicht anwesend war kann ich es nicht genau sagen. ich hatte bis jetzt auch nicht viel mit dem begriff zu tun.

auf jeden fall dachte ich laut den berichten meiner kollegen, dass alle übergabeparameter als aktualparameter definiert sind. die verwendete variable innerhalb der funktion ist dann der formalparameter.

bsp:


static void main()
{
    int i = 0;
    DoIt(i, i); //i ist hier jeweils der aktualparameter
}

static void DoIt(int a, int b)
{
    //a und b sind formalparameter
}

irgendwie ist der begriff praktisch niemandem geläufig. naja, 😃

Hier die Frage inklusive allen Antworten:
Was ist ein Aktual-Parameter?
[ ] Eine Variable im Rahmen einer Schnittstelle
[ ] Eine Variable, die im Unterprogrammaufruf verwendet wird
[ ] Eine Variable mit einem konstanten Wert
[ ] Eine Variable, die keinen festen Datentyp hat
[ ] Eine Variable, die beim Unterprogrammaufruf einen Wert besitzt

Gleich meine Gedanken dazu:

  1. Falsch
  2. Richtig
  3. Falsch
  4. ?
  5. Wenn ich schon dabei bin: ?, wobei ich tendiere zu Ja. Die Frage wäre hier: Wird null auch als Wert angesehen...?

Gruss
benj

25.11.2010 - 21:53 Uhr

hallo,

wir nehmen in der c# durch. man musste nur in die lektionen kommen, wenn man die grundlagen nicht beherrscht.

diese beinhalten bis jetzt: schleifen, primitive datentypen, funktionen
dadurch dass ich schon seit jahren c# programmiere sah ich es noch nicht als nötig dazuzukommen.

wir haben bald eine prüfung dazu, das ist auch ok. nun haben wir per mail eine probeprüfung erhalten, diese ist soweit auch nicht schwer, ausser eine Frage kann ich mir nicht eindeutig beantworten.

Pro Frage sind mehrere Antworten möglich, ich schreibe aber nur die von mir nicht verstande auf:

Was ist ein Aktual-Parameter?
...
[ ] Eine Variable, die keinen festen Datentyp hat
...

ich habe auch mehrere leute gefragt, jedoch ist sich niemand wirklich sicher, auch nicht die die den Unterricht besucht haben...

hauptsächlich frage ich mich was hier "fester datentyp" in dem zusammenhang bedeutet. ein aktualparameter muss ja nur zum zieltyp (vererbung, inplizite konvertierungen...) kompatibel sein und nicht genau diesem typ entsprechen.

hat jemand eine idee?

gruss
b3nj

19.04.2010 - 09:57 Uhr

danke für die schnelle antwort!

also, das mit ctrl/shift habe ich auch schon probiert (habe vergessen es zu erwähnen).

Das funktioniert ganz gut wenn man zuerst auf die "ballern-taste" (ctrl) klickt und dann auf eine andere, dann wird beides wahrgenommen.

klicke ich jedoch zuerst auf eine andere taste und bleibe auch auf ihr (z.B. wenn ich ganz nacht rechts springen will) und möchte zwischendurch ballern, dann ist der aufruf der ersten taste (in diesem fall der rechte pfeil) verloren. somit funktioniert das nur, wenn ctrl zuerst geklickt wird, was ja nicht immer der fall sein muss.

die funktion "GetAsyncKeyState" werde ich mit gleich mal anschauen, vielen dank.

mfG
benj

-edit

ok, die funktion funktioniert perfekt:

         [DllImport("user32.dll")]
        static extern bool GetAsyncKeyState(ConsoleKey key); 

Wobei sie global funktioniert und nicht nur auf den eigenen Prozess beschränkt ist, was aber nicht so schlimm ist.

vielen dank.

mfG
benj

19.04.2010 - 09:22 Uhr

Hallo,

ich habe gerade probiert ein kleines spiel (so à la space invaders) für die konsole zu machen, mal um zu schauen ob und wies geht.

jetzt bin ich aber über ein problem gestolpert. ich habe eine kleine "engine" geschrieben um die ganze ausgabe ein bisschen zu abstrahieren, diese engine beinhaltet auch die eingabe, in diesem fall der tastendruck des users.

viele tasten gibt es nicht: rechts, links, space (feuern).
intern wird für die eingabe der tasten ein eigener Thread erstellt und gestartet, dieser ist +/- so aufgebaut (ich habe den code nicht hier):

while (true)
{
    ConsoleKey key = Console.ReadKey().Key;
    if (KeyPressed != null)
    {
         KeyPressed(this, new ConsoleKeyPressedEventArgs(key));
    }
}

Leider kann ich nicht parallel tasten lesen, bzw. nachschauen ob eine spezielle taste gedrückt ist oder nicht.

ich möchte machen, dass man gleichzeitig laufen und ballern kann, dadurch, dass ich aber nur eine taste auf einmal erkennen kann geht das natürlich nicht, entweder läuft man oder man ballert.

also:
ist es möglich irgendwelche events (keydown/keyup) aus der konsole abzufangen? oder kann ich irgendwo eine Liste aller gerade geklickten Tasten abrufen?

und kann man das ohne die WinApi machen? weil, wenn ich c# code dann probiere ich zumindest immer so plattformunabhängig wie möglich zu bleiben:-) falls es aber nur mit der WinApi geht, dann ists auch nicht so schlimm.

mfG
benj

29.01.2010 - 08:19 Uhr

Hallo,

Danke für die Antworten.

@jaensen

Ich werde das RFC gleich mal anschauen und ausprobieren. vielen dank.

@marsstein

ich habe gerade nachgeschaut, aber das xml-tag ist nötig. der tag wird im browser auch angezeigt, den source davon hab ich mit dem chrome geholt, keine ahnung weshalb der mit das tag im source nicht angezeigt hat, in der oberfläche ist es aber eindeutig vorhanden.

mfG toredo

28.01.2010 - 10:07 Uhr

Hallo,

Ich habe schön öfters mal einen Http-Post in C# abgeworfen. Als Daten habe ich dann immer einzelne normale parameter genommen, welche ich wie folgt in den http-body gefüllt habe:

a=asdf&b=dfgh&someeothervalue=asdasd

nun muss ich aber einen http-post für dieses formular machen:

<HTML xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> 
  <HEAD> 
    <TITLE>Debug Post</TITLE> 
  </HEAD> 
  <BODY> 
    <H1>Debug Post</H1> 
    <FORM ACTION="http://192.168.1.22:8081/unimodmcGwIfApp.cgi" METHOD="POST" ENCTYPE="multipart/form-data"> 
      <TEXTAREA name="data" rows="10" cols="80"> 
<request> 
  <getGwMacAddress> 
    <mac>00:11:22:dd:Ee:fF</mac> 
  </getGwMacAddress> 
</request> 
     </TEXTAREA> 
      <P> 
        <INPUT TYPE="submit" NAME="Submit" VALUE="Submit Form"> 
      </P> 
    </FORM> 
  </BODY> 
</HTML> 

wie ich im firefox mit tamper gesehen habe wird der inhalt nicht wie oben beschrieben gesendet. weiss jemand wie ich diesen vorgang in c# umsetzen kann?

mfG b3nj

-edit-

so ich habe nochmals fleissig gegoogelt.

ich habe noch einen anderen lösungsansatz gefunden:

            WebClient client = new WebClient();
            NameValueCollection parameters = new NameValueCollection();
            parameters.Add("data", @"<?xml version=""1.0"" encoding=""utf-8""?>
<request>
  <getGwMacAddress>
    <mac>00:11:22:dd:Ee:fF</mac>
  </getGwMacAddress>
</request>");
            byte[] response = client.UploadValues("http://" + something.IPAddress + ":8081/something.cgi", parameters);

wobei die url stimmt. das eingegebene xml sollte auch ein gültiges xml zurückgeben, ich erhalte als antwort jedoch:

<?xml version="1.0" encoding="utf-8"?>
<response>
<FunctionNotParsable>
<mac>XX:XX:XX:XX:XX:XX</mac>
<retVal>12</retVal>
<retStr>Input XML file does not validate</retStr>
</FunctionNotParsable>
</response>

ich habe mal den cgi-log auf "debug" geschaltet, das folgende kommt dabei raus:

42 [1081655824] INFO main (main.cpp:199) - Started ./unimodmcGwIfApp.cgi
49 [1081655824] INFO main (main.cpp:228) - Got xml from the CGI request [_xml version]"1.0" encoding]"utf-8"_-*\request-* \getGwMacAddress-* \mac00Z11Z22ZddZEeZfF\Omac-* \OgetGwMacAddress-*\Orequest^]
50 [1081655824] INFO main (main.cpp:247) - <?xml ... ?>no found!
55 [1081655824] INFO main (main.cpp:254) - Ended ./something.cgi

hier noch zum vergleich ein funktionierender aufruf mit dem oben angegebenen formular:

56 [1081655824] INFO main (main.cpp:234) - Parsed xml in memory
74 [1081655824] INFO main (Utils.cpp:99) - Parsed style sheet [getFunctionName.xslt]
82 [1081655824] INFO main (Utils.cpp:106) - Applied style sheet [getFunctionName.xslt]
84 [1081655824] INFO main (Utils.cpp:125) - Stripped string
85 [1081655824] INFO main (Utils.cpp:127) - Decoded string
90 [1081655824] INFO main (Utils.cpp:99) - Parsed style sheet [getMac.xslt]
92 [1081655824] INFO main (Utils.cpp:106) - Applied style sheet [getMac.xslt]
93 [1081655824] INFO main (Utils.cpp:125) - Stripped string
94 [1081655824] INFO main (Utils.cpp:127) - Decoded string
95 [1081655824] INFO main (main.cpp:191) - Mac ok
96 [1081655824] INFO GetMacAddress GetMacAddress.cpp:8) - Running
102 [1081655824] INFO main (main.cpp:254) - Ended ./something.cgi

ich habe auch schon probiert das encoding vom WebClient zu ändern, ich habe Default und UTF8 probiert, beides nützte nichts.

mfG b3nj

30.12.2009 - 08:28 Uhr

Hallo,

Ich habe einen HttpWebRequest, welcher auch tadellos funktioniert. Jetzt habe ich aber das Problem, dass ich für das Tool auch Proxyeinstellungen verwenden können muss.

Diese liegen unter einer URL als .cfg-Datei vor und werden auf den Client-PC's jeweils im Firefox unter "Extras/Einstellungen/Erweitert/Netzwerk/Einstellungen" als "Automatische Proxy-Konfigurations-URL" eingetragen.

Meine Frage dazu, kann ich eine solche Konfigurationsdatei irgendwie einlesen und auch benutzen?

mfG benj

15.06.2009 - 23:35 Uhr

Hallo,

Ich habe bereits ausführlich gegoogelt und hier nach Lösungen gesucht, jedoch hat alles nichts geholfen.

Meine aktuelle Lage:
-Ich entwickle gerade eine Software (bzw. sie existiert schon) welche auf Remoting basiert (ich habe bewusst Remoting und nicht WCF genommen, wobei ich in Zukunft wahrscheinlich mal mehr über WCF lernen werde)
-Diese Software bringt einen Fehler sobald der Client verbinden möchte, bzw zu dem Zeitpunkt, bei dem eine Methode aufgerufen wird "Es konnte keine Verbindung hergestellt werden, da der Zielcomputer die Verbindung verweigerte"
-Firewall usw. ist aus

Ich habe auch mehrere Beispielprojekte heruntergeladen um das ganze zu testen.

z.B. dieses hier:
http://www.codeproject.com/KB/IP/remotinggui.aspx

Dieses funktioniert auf einem anderem Notebook (XPSP3 Pro) problemlos, auf meinem Entwicklungsnotebook (Vista Ultimate SP1) erscheint jedoch auch der oben genannte Fehler.

Ich hab mal ein TestProjekt erstellt, welches jedoch auch nicht funktioniert, hier der Code:
IServer

    public interface IServer
    {
        string GetHelloWorld();
    }

Server

    public class Server : MarshalByRefObject, IServer
    {
        internal static Server DefaultInstance { get; private set; }

        public Server()
        {
            Console.WriteLine("I am here...");
            DefaultInstance = this;
        }

        public string GetHelloWorld()
        {
            return "Hello World";
        }
    }

Program.cs Server

            BinaryServerFormatterSinkProvider provider = new BinaryServerFormatterSinkProvider();
            provider.TypeFilterLevel = System.Runtime.Serialization.Formatters.TypeFilterLevel.Full;
            IDictionary props = new Hashtable();
            props["port"] = 50050;
            ChannelServices.RegisterChannel(new TcpChannel(props, null, provider), true);
            Server srv = new Server();
            ObjRef refGreeter = RemotingServices.Marshal(srv, "test");
            while (true)
            {
                Console.ReadKey();
                Console.Write("\b");
            }

Program.cs Client

            BinaryServerFormatterSinkProvider provider = new BinaryServerFormatterSinkProvider();
            provider.TypeFilterLevel = System.Runtime.Serialization.Formatters.TypeFilterLevel.Full;
            IDictionary props = new Hashtable();
            props["port"] = 0;
            ChannelServices.RegisterChannel(new TcpChannel(props, null, provider), true);
            IServer srv = (IServer)Activator.GetObject(
                typeof(IServer), "tcp://localhost:50050/test");
            Console.WriteLine(srv.GetHelloWorld());
            while (true)
            {
                Console.ReadKey();
                Console.Write("\b");
            }

Wobei ich mehrere Möglichkeiten gefunden habe eine Verbinung aufzubauen, jedoch funktioniert auf meinem Entiwcklungsnotebook keine davon.

mfG benj

10.06.2009 - 14:55 Uhr

Hallo,

Ich habe eine Dll importiert bzw eine Methode der Dll, hier der Code:

SECItem *
NSSBase64_DecodeBuffer (PRArenaPool *arenaOpt, SECItem *outItemOpt,
                        const char *inStr, unsigned int inLen)
{
    return NSSBase64_DecodeBuffer_Util(arenaOpt, outItemOpt, inStr, inLen);
}

http://www.google.com/codesearch/p?hl=de#e_ObwTAVPyo/security/nss/lib/nss/utilwrap.c&q=NSSBase64_DecodeBuffer&l=734

Zum verständnis noch SECItem:

struct SECItem {
  SECItemType type;
  unsigned char *data;
  unsigned int len;
};

http://www.google.com/codesearch/p?hl=de#YwaaF8DorRY/src/chrome/browser/importer/firefox_importer_utils.h&q=SECItem&l=125

Und noch SECItemType:

enum SECItemType {
  siBuffer = 0,
  siClearDataBuffer = 1,
  siCipherDataBuffer = 2,
  siDERCertBuffer = 3,
  siEncodedCertBuffer = 4,
  siDERNameBuffer = 5,
  siEncodedNameBuffer = 6,
  siAsciiNameString = 7,
  siAsciiString = 8,
  siDEROID = 9,
  siUnsignedInteger = 10,
  siUTCTime = 11,
  siGeneralizedTime = 12
};

http://www.google.com/codesearch/p?hl=de#YwaaF8DorRY/src/chrome/browser/importer/firefox_importer_utils.h&q=SECItemType&l=109

Und ein Aufruf der NSSBase64_DecodeBuffer-Funktion:

SECItem newResult = {0, 0, 0};
SECItem *ok = NSSBase64_DecodeBuffer(NULL, &newResult,
                               (const char *)result.data, result.len);

Ich habe schon alles möglihc eprobiert, aber nie hat es funktioniert.

Hier habe ich z.B. die Struktut SECItem nachgebaut:

        public struct SECItem
        {
            public Int32 type;
            public char[] data;
            public Int32 length;
        }

Und hier die Methodendeklaration:

        [DllImport(@"nss3.dll", CharSet = CharSet.Ansi)]
        public static extern int NSSBase64_DecodeBuffer(object val, ref SECItem output, StringBuilder input, UInt32 inputLength);[/csharp

Wobei diese habe ich schon tausendmal geändert, halt aus Not mal alles ausprobiert.

Aktuell sieht der Aufruf so aus:
[csharp]                SECItem output1 = new SECItem();
                output1.data = new char[1000];
                output1.length = 1000;
...
NSSBase64_DecodeBuffer(null, ref output1, code, (UInt32)code.Length);

Das Ergebnis ist eine SafeArrayTypeMistmatchException, mit der folgenden Message:
"Das angegebene Array hat nicht den erwarteten Typ."

Kann mir hier bitte jemand helfen?

mfG benj

28.05.2009 - 08:46 Uhr

@herbivore...

😄ok, der fehler war zu offensichtlich, thx für den hinweis🙂

@JAck30lena

naja, der aufbau erlaubt mir bis jetzt nichts anderes, wobei ich mir doch nochmals alles durch den kopf gehen lasse, wenn möglich werde ich es noch so umcoden, dass die gui im hauptthread läuft.

thx für die rasche hilfe.

mfG b3nj

27.05.2009 - 22:59 Uhr

Ok, diesen weg habe ich auch schon probiert, da der "nicht-gui-code" jedoch in dem thread laufen sollte in der er gerade läuft muss ich zwangsweise die gui in einen eigenen thread ploppen:

        static void Main(string[] args)
        {
            new Thread(delegate()
                {
                    Form form = new Form();
                    form.Show();
                    Application.Run(new Form());
                }
            );
            Console.ReadKey();
        }

wobei jetzt gar kein fesnter mehr erscheint?

mfG b3nj

27.05.2009 - 22:46 Uhr

Hallo,

Ich hatte heute bei einem Programm ein Problem, dieses habe ich nun auf das nötigste minimiert:
In einer Konsolenanwendung soll eine Form geöffnet werden, der Code soll jedoch trotzdem weiterlaufen. Hier wäre ein zweiter Thread nötig denke ich, aber egal was ich bastle die Form friert ein, hier der Beispielcode:

        static void Main(string[] args)
        {
            new Form().Show();
            Console.ReadKey();
        }

Der Verweis zu Windows.Forms muss halt noch hinzugefügt werden.

Weiss jemand wie ich das einfrieren der Form verhindern kann?

mfG b3nj

10.11.2008 - 09:43 Uhr

Hallo,

Ich habe eine Projektmappe mit zwei Projekten, einem Windows Dienst und einem Windows-Forms-Programm.

Der Dienst verrichtet seine Arbeit im Hintergrund, die Forms-Anwendung möchte ich dazu nutzen den Status anzuzeigen (Was wo verbeitet wird/wurde). Hierfür muss ich zugriff auf die daten des dienstes haben, jedoch weiss ich nicht wie ich direkt zugriff auf ihn habe.

kurz:
weiss jemand wie ich zur laufzeit auf die objekte (m)eines windows dienstes zugreifen kann?

mfG b3nj

10.10.2008 - 18:59 Uhr

verwendetes Datenbanksystem: MsSQl 2000

Hallo,

Kennt hier jemand ein einfaches Mapper-Tool um Datenbanken aus einem MSSQL-2000 server zu mappen?

die funktionalitäten können beschränkt sein, jedoch sollte die benutzung realtiv einfach sein.

vielen dank für die antworten

mfG benj

08.09.2008 - 11:48 Uhr

nein, da unser kleines projekt nur für uns intern was bedeutet =) d.h. wir bestimmen selbst was wie gemacht wird.

ich werd gleich mal google fragen was cls ist. =)
thx fürs stichwort

mfG benj

08.09.2008 - 09:16 Uhr

Hallo,

Ich und zwei Kollegen wollen zusammen etwas programmieren. Jetzt verwendet jeder von uns aber einen anderen programmierstil (ich z.B. fange bei allen Feldern mit _ an, alle Eigenschaften gross geschrieben und Parameternamen klein...).

ein ähnliches problem haben wir bei windows forms, ich z.B. nenne die Textbox tb, andere benutzen den prefix txt.

gibt es da irgendeinen weitverbreiteten standard? halt allgemein wegen prefixen usw.?

in klassen benutze ich immer #region Fields #endregion usw. für alle möglichen "Dinge" die in Klassen vorkommen, da habe ich auch eine feste Reihenfolge. gibt es auch hier eine lösung um klassen mehr oder weniger übersichtlich zu halten oder ist diese schon ok?

mfG benj

15.06.2008 - 21:40 Uhr

Der Service muss ein Array of Users definieren.

Dieses Array wird ja definiert, aber halt nicht vollständig wie es scheint.

Das Array benötigt das Attribut der Klasse zum Serialisieren.

Das Array hat ja eigentlich schon in seinem Namen bzw. Tagname den Klassennamen des Typs (ArrayOfUser) oder verstehe ich da etwas falsch?

Die Klasse User sollte eigentlich auch serialisierbar sein:

    [Serializable()]
    public class User

Sorry, ich bin gerade ein bisschen verwirrt. Ein Link auf ein brauchbares Dokument zu diesem Thema wäre gut, habe in google nicht viel zu der Übertragung von Objekten gefunden.

mfG b3nj

15.06.2008 - 18:49 Uhr

Hallo,

Ich arbeite gerade an einem Webservice, welcher eine Funktion "Test" besitzt. String's, Int's und andere primitive Datentypen kann ich ohne Probleme senden. Ich habe jetzt jedoch eine Klasse "User" und möchte einen User-Array in der Webfunktion zurückgeben.

Wenn ich den Code debugge dann wird ein Array zurückgegeben, welcher die Länge "1" hat. Im xml-File, das zurückgegeben wird steht jedoch das:

<?xml version="1.0" encoding="utf-8"?>
<ArrayOfUser xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://tempuri.org/">
  <User />
</ArrayOfUser>

Wieso das? Fehler usw. gibt es keine.

mfG b3nj

10.06.2008 - 21:59 Uhr

hallo,

sry, dass ich die fehlermeldung nicht mitangegeben habe, hier:

System.Data.SqlClient.SqlException: Fehler beim Anfügen einer automatisch benannten Datenbank für die Datei C:\Programme\Microsoft Visual Studio 8\Common7\IDE\App_Data\Database.mdf. Eine Datenbank mit diesem Namen ist bereits vorhanden, die angegebene Datei kann nicht geöffnet werden, oder sie befindet sich in der UNC-Freigabe.

die Datei Database.mdf und der Ordner App_Data existieren an der genannten stelle übrigens nicht.

wie macht man es denn normalerweise wenn man eine datenbank als datei in das projekt einfügt? wird schon irgendein connection-objekt oder etwas in der art erstellt?

mfG b3nj

10.06.2008 - 21:37 Uhr

Hallo,

Ich habe mal angefangen mit Webservices zu arbeiten, jetzt habe ich auch das erste mal eine datenbank als datei in ein projekt geladen.

Bild siehe Anhang

im connection-string habe ich das wie folgt zusammengebaut:

connectionString = @"Data Source=.\SQLEXPRESS;AttachDbFilename=""" + Environment.CurrentDirectory + @"\App_Data\Database.mdf" + @""";Integrated Security=True;User Instance=True";

hab alles probiert aber die db kann nicht geladen werden.

ich weiss nicht ob es am "debug-webserver" liegt oder an dem connectionstring. im iis habe ich es noch nicht getestet, weil das ganze sollte ja auch im debuger laufen?

mfG b3nj

03.06.2008 - 20:26 Uhr

🙂danke für schnelle & brauchbare antwort 🙂

mfG b3nj

03.06.2008 - 20:04 Uhr

hallo

gibt eine einfache möglichkeit einen int32 zu einem byte[4] bzw einen int64 zu einem byte[8] zu konvertieren? oder muss ich da selbst eine funktion schreiben.

vielen dank

mfG b3nj

-edit-

glaub schon wieder im falschen forum erstellt, sry -> Basistechnologien und allgemeine .NET-Klassen

29.05.2008 - 21:00 Uhr

bei ****** gabs mal nen "bug" (oder wars n'"feature"?), naja auf jedenf all konnte man gratis ohne anmeldung sms mit nem selbst gewählten absender versendet werden.

eventuel gehts noch, kA

mfG b3nj

27.05.2008 - 14:17 Uhr

hallo,

ich wollte ein fenster (n'popup) für eine bessere texteingabe für ein feld erstellen, dies habe ich dann auch hingekriegt, zumindest halbwegs hier mein problem:

Webseite.aspx
hier existiert eine html-textbox tbShort.
hier wird dieser js-code aufgerufen:

            function TextPopup()
            {
                window.open("TextPopup.aspx", "", "width=600,height=600").focus();
            }

das popup enthält eine html-textbox tbText, der text wird auch geladen.
irgendwann hat man ja fertig getippt, dann wird durch einen normalen html-button dieses js ausgeführt:

    function CloseF()
    {
        opener.getElementById('tbShort').value = tbText.value;
        opener.tbShort.value = tbText.value;
        window.close();
    }

was passiert?
der text aus tbText verschwindet, jedoch wird bei dem opener-fenster (meine webseite.aspx) nicht in tbShort geschrieben...

weiss vielleicht jemand wieso, oder wie man das besser lösen könnte?

mfG b3nj

27.05.2008 - 13:32 Uhr

thx, ich werde mir sowhol den link als auch den code anschauen, ich denke damit ist das problem gelöst 🙂

mfG b3nj

26.05.2008 - 22:02 Uhr

hallo,

kann man irgendwie die laufwerksbuchstaben aller internen/extrenen festplatten holen?

habe leider nicht wirklich was dazu gefunden.

mfG b3nj

26.05.2008 - 22:01 Uhr

🙂thx, warum bin ich da nur nicht selbst draufgekommen...

mfG b3nj

26.05.2008 - 19:25 Uhr

Hallo,

ist es irgendwie möglich nen Buchstaben zu nem Bitmap zu machen und dabei halt die Auflösung des resultierenden Bitmaps selbst zu bestimmen.

z.B.
B ->

mfG b3nj

26.05.2008 - 11:58 Uhr

Hallo,

Weiss hier vielelicht jemand wie man den Zeit berechnen kann die benötigt wurde um die aktuelle Seite aufzurufen?

ich denke mal, man muss von der seite die aufgerufen wird zwei events nehmen und die zeitliche differenz holen, was auch kein problem wäre, aber welche events, falls es denn überhaupt so funktioniert?

schlussendlich sollte es so was geben:
<!--Generated in x.xxx seconds-->

mfG b3nj

22.05.2008 - 22:49 Uhr

Hallo,

Die Frage ist eigentlich recht einfach, jedoch wusste ich nicht wie ich sie gut umformen kann um bei google/boardsuche ein gutes Resultat zu finden.

Also:
Gibt es in ASP.NET eine Möglichkeit ein Control hinzuzufügen welches eigentlich nur ein Text ist.
So in etwa:

this.Controls.Add(new TextControl("<b>Normale Ausgabe</b>"));

also ein Control, dass eigentlich keines ist sondern nur ne "Textausgabe".

mfG b3nj

05.05.2008 - 12:46 Uhr

=)vielen dank, hab auch schon gegoogelt und was gefunden, wobei ich nicht zu 100% sicher bin dass das auch das richtige ist:
http://www.developerfusion.co.uk/show/4039/1/

deinen link bevorzuge ich mal, danke

mfG benj

05.05.2008 - 12:01 Uhr

das wäre natürlich die geilste möglichkeit von allen, jedoch:
ist das nicht viel zu viel code um es mal "schnell" zu coden?
und falls es machbar ist, gibt es irgendwo ein bsp-projekt (sprache ist egal) in einer sprache welches gut dokumentiert ist? dieses ollte wenn möglich gleich opensource sein, damit ich notfalls zumindest die logik kopieren kann.
=)

mfG benj

05.05.2008 - 11:46 Uhr

halt nicht über einen (sry, hatte im beitrag oben "framden" statt "fremden" geschrieben, ist editiert) fremden, d.h. das tool sollte einen integriert haben. eben vergleichbar mit sendmail (linux) oder mail() (php), baer halt als konsolentool oder dll.

mfG benj

05.05.2008 - 11:27 Uhr

hallo,

hauptsächlich geht es mir darum eine mail zu versenden ohne einen fremden smtp-server, d.h. so wie bei linux sendmail (oder so, weiss auch nicht mehr wie das tool heisst), oder bei php mail(*). ich bin mir auch im klaren, dass solche mails natürlich nicht beantwortet werden können wenn nicht genau mein absender drin steht.

so etwas suche ich als dll für c# oder aber auch als externes programm, welches ich aber über einige parameter füttern kann.
meine anforderungen an das tool:
-ansteuerung von aussen
-min 150zeichen mail-text
-html-mail braucht es nicht

thx

mfG benj

31.03.2008 - 13:17 Uhr

schlussendlich muss die zahl acuh keine zahl mehr sein, da es mir auch schon klar war dass das ganze zu nem string konvertiert werden muss, sry das ich das nicht erwähnt habe.

Ich schaffe es irgendwie nicht die zahlen die ich bei einem select hole mit tausendertrennstrichen zu formatieren, gibts hierzu irgendeinen befehl in sql?
Das kann es so nicht geben: Eine Zahl ist eine Zahl ist eine Zahl; solche Tausender-Trennstriche werden innerhalb von speziellen String-Darstellungen verwendet.

Du hast deshalb (mindestens) drei Möglichkeiten: 1.Du konvertierst die Ausgabe als String; dazu steht mindestens CAST zur Verfügung, aber ich weiß nicht, ob MS-SQL dafür passende Parameter anbietet (aber MS-Spezialisten gibt es zuhauf). 1.Du übernimmst den Zahlenwert und formatierst ihn für die Ausgabe mit **ToString() **oder String.Format und passenden Parametern. 1.Du setzt **NumberGroupSeparator **oder CurrencyGroupSeparator in **NumberFormatInfo **wie gewünscht.

Gruß Jürgen

die formatierung selbst funktioniert im sql-code selbst also eventuel noch nicht?

dann muss ich wohl oder überl im code formatieren, thx für die hilfe.

mfG b3nj

31.03.2008 - 11:15 Uhr

verwendetes Datenbanksystem: MSSQL-Server2k3

hallo,

Ich schaffe es irgendwie nicht die zahlen die ich bei einem select hole mit tausendertrennstrichen zu formatieren, gibts hierzu irgendeinen befehl in sql?

bsp:

select wert from tbwerte

wert
------
1000000.1234

soll aber so rauskommen
wert
------
1'000'000.1234

mfG b3nj

27.03.2008 - 08:57 Uhr

hallo,

ich arbeite grade an ner neuen webseit, jedoch gabs ein problem:
ich wollte im code auf eine bilddatei zugreifen (liegt im gleichen verzeichnis), was aber seltsamerweise nicht funktionierte, bis ich mit System.Environment.CurrentDirectory gemerkt habe, dass der aktuelle ordner gar nicht der ordner der webseite ist sondern sonst einer... deshalb kann ich auch nicht direkt zugreifen... daher stellt sich mir die frage ob es nicht möglich ist den absoluten pfad der webseite rauszubekommen, dass ich trotzdem auf das bild zugreifen kann?

mfG b3nj

15.02.2008 - 15:23 Uhr

Hallo,

Ich habe mir die aktuelle Version von Google SketchUp (gratisversion) gezogen, hier habe ich mit ruby ein script geschrieben welches mir einen tisch erstellt (bzw eine Funktion welcher ich parameter übergebe). jetzt die frage: kann ich irgendwie aus .net sketchup ansteuern und dann die parameter an die ruby-funktion übergeben und als resultat dann ein bild des 3d-models erhalte?

ich weiss ist ein bisschen viel auf einmal, aber es wäre geil wenn das ginge. wenn nötig erkläre ich noch genauer wie es geht.

mfG benj

01.02.2008 - 10:50 Uhr

Hallo,

zuerst habe ich versucht ein usercontrol zu erstellen welches vom panel erbt:
1.ich habe ein neues element erstellt (usercontrol) und anstatt von usercontrol einfach von panel geerbt -> ergab einen fehler
2.ich habe eine klasse (in app_code) erstellt welche vom panel erst und damit "gebastelt" -> ich konnte mein selbstgebautes control icht auf die webform bringen, wie auch?

deshalb ahbe ich noch mal mit der grundlage usercontrol begonnen

hier noch mein "resultat"

<%@ Control Language="C#" AutoEventWireup="true" CodeFile="Rahmen.ascx.cs" Inherits="Rahmen" %>
<table>
    <tr>
        <td style="background-color:#123456"></td>
        <td style="background-color:#123456"></td>
        <td style="background-color:#123456"></td>
    </tr>
    <tr>
        <td style="background-color:#123456"></td>
        <td>
            <asp:PlaceHolder ID="phControls" runat="server"></asp:PlaceHolder>
        </td>
        <td style="background-color:#123456"></td>
    </tr>
    <tr>
        <td style="background-color:#123456"></td>
        <td style="background-color:#123456"></td>
        <td style="background-color:#123456"></td>
    </tr>
</table>

also hier habe ich nun einen PlaceHolder hinzugefügt welcher dann auch die controls erhält. bzw ich lasse mal den code sprechen:

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

[PersistChildren(false), ParseChildren(true)]
public partial class Rahmen : UserControl
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }

    public ControlCollection Controls
    {
        get { return phControls.Controls; }
    }
}

braucht glaub ich nicht mehr viel erklärung.

natürlich muss das ganze auch mal benuzt werden, hierfür verwende ich die RahmenTest.aspx:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="RahmenTest.aspx.cs" Inherits="RahmenTest" %>

<%@ Register Src="Rahmen.ascx" TagName="Rahmen" TagPrefix="uc1" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Unbenannte Seite</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <uc1:Rahmen ID="Rahmen2" runat="server">
        </uc1:Rahmen>
        <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" />
        
    </form>
</body>
</html>

mit dem code:

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

public partial class RahmenTest : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        for (int i = 0; i < 10; i++)
            Rahmen2.Controls.Add(new Button());
    }
}

hier werden nun einem Rahmen-Control weitere Controls hinzugefügt funtkioniert auch perfekt.

das problem ist also praktisch gelöst, ausser eine (optimale) feinheit fehlt noch. es ist noch nicht möglich so etwas zu kompilieren:

        <uc1:Rahmen ID="Rahmen2" runat="server">
        <asp:Button ID="btnTest" runat="server"/>
        </uc1:Rahmen>

da zwischen den tags keine controls sein dürfen.

es wäre schön wenn es da noch eine lösung gäbe🙂

thx

mfG benj

31.01.2008 - 20:32 Uhr

der sinn wäre auch nicht direkt ein schönes control zu machen sondern eher platz zu sparen... wäre nicht sehr sauber oder schon🙂

trotzdem danke dass du mir geholfen hast 🙂

mfG benj

31.01.2008 - 19:12 Uhr

hallo,

ich habe es mir in etwa so ausgedacht, also vom prinzig her:

<%@ Control Language="C#" AutoEventWireup="true" CodeFile="WebUserControl.ascx.cs" Inherits="WebUserControl" %>
<table>
    <tr>
        <td style="background-color:#123456"></td>
        <td style="background-color:#123456"></td>
        <td style="background-color:#123456"></td>
    </tr>
    <tr>
        <td style="background-color:#123456"></td>
        <td>hier sollen dann die eigenen controls hinkommen, bzw. hier kann man im nachinein noch controls reinhauen</td>
        <td style="background-color:#123456"></td>
    </tr>
    <tr>
        <td style="background-color:#123456"></td>
        <td style="background-color:#123456"></td>
        <td style="background-color:#123456"></td>
    </tr>
</table>

hier das codefile, ich habe jetzt mal von panel geerbet:

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

public partial class WebUserControl : System.Web.UI.WebControls.Panel
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }
}

hab mich halt ein bisschen dumm ausgedrückt mit dem rahmen, jedoch meine ich halt einen dicken rahmen welcher von mir selbst erstellt wird, wie halt hier im bsp. eine tabelle mit neuen zellen, bei denen nur die innere benutzbar ist die äusseren bilden hier den "rahmen".

mfG benj

31.01.2008 - 14:36 Uhr

Kaum das eine Problem glöst taucht das nächste auf (immer noch die gleiche Webanwendung).
Obwohl dieses nicht soo wichtig ist, jedoch später eventuel mal Zeit sparen kann🙂

also, ich habe (wieder) ein usercontrol, dieses besteht aus einem rahmen und noch zwei drei (weniger wichtigen) dingen. auf jeden fall ist in der mitte noch ein leerer platz. dieser platz soll nutzbar werden d.h. das control soll in etwa so benutzbar sein:

...
        <uc1:UserControlT ID="UserControlT1" runat="server">
        hier steht ein text, natürlich können hier auch noch andere controls sein
        </uc1:UserControlT>
...

zuerst spuckte vs einen fehler als ich die ansicht wechseln wollte (war logisch):

Wechsel der Ansichten nicht möglich: Zwischen den Start- und Endtags des UserControlT-Elements darf kein Inhalt angegeben werden.

durch diesen fehler wollte ich mich schlau machen über google, ich fand einen thread bei dem genau das gleiche thema behandelt wurde:
http://www.aspnetzone.de/forums/thread/180396.aspx
es gab leider nie eine richtige antwort auf die farge des users🙁

Deshalb ahbe ich meine UserControlT auch mit dem folgenden code bestückt:

[PersistChildren(false), ParseChildren(true)]

wobei noch immer ein fehler kommt, meine fragen dazu:

  1. wie kann ich machen dass mein control "nur" einen rahmen darstellt oder eben halt mit anderen controls aufgefüllt werden kann?
  2. wie kann ich meinem control sagen wo dass ein "childControl" abgelegt werden kann?

tut oder ähnlich wäre auch okay🙂

thx&mfG benj

31.01.2008 - 13:54 Uhr

Hallo B3nj

Ja, klar geht die Ausgabe an den Anfang.
ASP.NET läuft eventgesteuert, d.h. die Controls werden nach einer bestimmten Reihenfolge bearbeitet und schlussendlich in den Ausgabestrom geschrieben.
Per Response.Write() schreibst du direkt in den Ausgabestrom, ASP.NET schreibt auch noch rein, aber erst später. etwas ähnliches habe ich mir bereits zusammengedacht, jedoch konnte ich es mir weder bestätigen noch ändern da ich keine andere lösung gesehen habe.

Response.Write() sollte nicht mehr benutzt werden.
Sowie auch Request.Form[] (Nur in Spezialfällen). Jetzt wo ich weiss was Response.Write() macht werd ich es auch nicht mehr benutzen🙂

this.Controls.Add(new LiteralControl(<CSS>));  

was auch immer ein LiteralControl ist, es funktioniert🙂 trotzdem werde ich mich noch schlau machen, was das genau für ein control ist.

Die Dateiendung ist bei CSS völlig egal.
Am besten entwickelst du dir einen Handler, der das CSS ausliefert,
so hast du auch den Vorteil, das der Browser die CSS Datei cachen kann.
Siehe:

Habs grade ausgedruckt, da ich jetzt garde keine Zeit habe (bin mit der Arbeit ein bisschen hinten nach weil ich hier so lange hatte) werd ichs beim heimweg im zug/bus lesen.

vielen dank für die schnelle und gute hilfe🙂

mfG benj

31.01.2008 - 13:15 Uhr

okay, hier zuerst ein älterer thread von mir zu praktisch dem gleichen problem:
dynamisches css
Ich wollt eine dynamische CSS-Datei erstellen und dann meine master-seite auf diese verlinken.
jedoch wurde die css-datei nicht angenommen, wie es scheint wegen der endung .aspx, wobei ich bis zu diesem moment dachte, dass beim benutzen von css-dateien die endung bedeutungslos ist.

egal, lange konnte ich jetzt damit leben, ich habe jetzt einfach immer x verschiedene CSS-Dateien erstellt und dann auf die richtige verlinkt...

da ich heute wieder vor zu vielen ähnlichen css-dateien sitze, wollte ich am morgen nochmals versuchen eine dynamische css-datei zu erstellen und dann immer wieder auf die aspx-Seite linke welche sie ausgibt - erfolglos...

dann habe ich mal wieder mein hirn gefragt... wie kann ich sonst noch einen dynamischen css-code einbinden?
natürlich über ein include... dieses inkludiert jedoch logischerweise den richteigen code, d.h. nciht seine ausgabe (welchen ich in der datei mit dem html-code nicht brauchen kann), naja include is eh nicht so mein ding... dann habe ich weitergedacht, irgendwann kam ich auf die idee einfach ein usercontrol zu erstellen, welches die ausgabe des css-codes vornimmt, dieses usercontrol habe ich dann im head der masterseite versteckt, damit es hier den css-code erstellt... zur besseren darstellung des von mir gemachten:
masterseite

...
    <head id="head" runat="server">
...
        <uc1:GetCSS id="GetCSS" runat="server"/>
...
    </head>
...

wobei GetCSS mein usercontrol ist.

GetCss.ascx.cs

...
    protected void Page_Load(object sender, EventArgs e)
    {
...
        Response.Write(css);
    }
...

hier wird der generierte css-code ausgegeben
GetCSS.ascx

<%@ Control Language="C#" AutoEventWireup="true" CodeFile="GetCSS.aspx.cs" Inherits="GetCssClass" %>

Die GetCSS.ascx ist natürlich "leer", da die ihre ausgabe nur aus dem css-code bestehen soll

wenn ich eine inhaltsseite der oben beschriebenen masterseite öffne und den code anschaue, stehe ich vor so was:

<style type="text/css">
body
{
	font-family:Verdana;
	font-size:10px;
}
...
</style>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
    <head id="ctl00_head">
...
    </head>
...

wieso wird denn die ausgabe des user-controls so nach oben verschoben und ist nicht im head-bereich?!?

ich hoffe die problematik ist halbwegs beschrieben, eigentlich wollte ich ja nur ein dynamisches css-file😉 aber wenn ich nach ner lösung suche suche ich teilweise wie jetzt halt auch mal zimlich abwegig🙂

mfG benj