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

  • »
  • Portal
  • |
  • Mitglieder
Beiträge von él toro
Thema: Cache auf 3 Min setzen auf HttpWebRequest
Am im Forum: Web-Technologien

Hallo w1z4rd2003,
probier mal

req.Headers.Add("Cache-Control", String.Format("max-age={0}", TimeSpan.FromMinutes(3).TotalSeconds));
alternativ

req.Headers.Add("Cache-Control", "max-age=180");

siehe dazu auch www.w3.org

Grüße

Thema: C# - ExcelAutomation; Downcast eines workbook object
Am im Forum: Office-Technologien

"Activate" ist das Zauberwort ...

Ab und an auch bitte mal selbst :rtfm: benützen --> _Worksheet Interface

Thema: C# - ExcelAutomation; Downcast eines workbook object
Am im Forum: Office-Technologien

Zitat von JessicaLampe
Leider hab ich teilweise immer noch dasselbe verhalten. In einem Workbook (z. B. C:\ExcelDatei1.xls) ist der Makroname "Makro1" definiert, in einem anderen Workbook (z. B. C:\ExcelDatei2.xls) nicht. Nun wird trotz ermittelten der Applikationsinstanz nicht immer das Makro in dem Workbook ausgeführt, in dem es definiert wurde.
Kann ich leider nicht nachvollziehen

Wie ruffst du deinen Code auf?

Thema: C# - ExcelAutomation; Downcast eines workbook object
Am im Forum: Office-Technologien

Zitat von JessicaLampe
Du verwendest .GetActiveObject um EINE aktive Excel-Instanz zu ermitteln. Das Problem ist hierbei, das NIE vorhersehbar ist welche der geöffneten Excel-Instanzen geschnappt wird.
Ich weiß, war nur ein Beispiel
Zitat von JessicaLampe
Aus diesem Grund bin ich nach einer langen Suche darauf gekommen die ROT table durchzugehen. Dort findet man nämlich alle aktiven Workbooks aufgelistet.
Hast ja Recht, ich bin dem aufgesessen, dass man damit die Applikation selbst bekommt. Mein Fehler 8)

xxxprod hat zum Teil Recht. Da du Late Binding verwenden möchtest hier mal als Wiedergutmachung nen bisschen Code

object[] monikers = Win32.Win32.GetActiveObjectsFromROT("Mappe1.xls");

object oWorkbook = null, oApp = null;
try
{
   oWorkbook = monikers[0];

   oApp = oWorkbook.GetType().InvokeMember("Application",
      BindingFlags.GetProperty | BindingFlags.Instance | BindingFlags.Public,
      null, oWorkbook, null);

   oApp.GetType().InvokeMember("Run",
      BindingFlags.Public | BindingFlags.InvokeMethod | BindingFlags.Instance,
      null, oApp, new object[] { "Makro1" });
}
finally
{
   if (oApp != null) Marshal.ReleaseComObject(oApp);
   if (oWorkbook != null) Marshal.ReleaseComObject(oWorkbook);

   foreach (object o in monikers)
      Marshal.ReleaseComObject(o);
}

Und noch mein Wrapper:

public class Win32
{
   [DllImport("ole32.dll")]
   public static extern int GetRunningObjectTable(int reserved, out IRunningObjectTable prot);

   [DllImport("ole32.dll")]
   public static extern int CreateBindCtx(int reserved, out IBindCtx ppbc);

   public static object[] GetActiveObjectsFromROT(string moniker)
   {
      ArrayList objs = new ArrayList();
      IRunningObjectTable prot;
      IEnumMoniker pMonkEnum;

      GetRunningObjectTable(0, out prot);
      prot.EnumRunning(out pMonkEnum);
      pMonkEnum.Reset();
      IntPtr fetched = IntPtr.Zero;

      IMoniker[] pmon = new IMoniker[1];
      while (pMonkEnum.Next(1, pmon, fetched) == 0)
      {
         IBindCtx pCtx;
         CreateBindCtx(0, out pCtx);
         string str;

         pmon[0].GetDisplayName(pCtx, null, out str);
         if (str.Contains(moniker))
         {
            object objReturnObject;
            prot.GetObject(pmon[0], out objReturnObject);
            objs.Add(objReturnObject);
         }
      }

      return objs.ToArray();
   } 
}

Hier nun aber auch gleich wieder der Hinweis: :rtfm:

Thema: C# - ExcelAutomation; Downcast eines workbook object
Am im Forum: Office-Technologien

Nur mal so zum Verständnis:

object XL = System.Runtime.InteropServices.Marshal.GetActiveObject("Excel.Application");
Liefert dir ein Object (genauer einen RCW) für die Excel-Anwendung.

Für das Makro musst du natürlich auch den Namen übergeben ...

Bei mir läuft folgender Code ohne Probleme:

object oApp = Marshal.GetActiveObject("Excel.Application");

oApp.GetType().InvokeMember("Run", BindingFlags.Instance | BindingFlags.InvokeMethod | BindingFlags.Public, null,
oApp, new object[] { "Makro1" });

Thema: C# - ExcelAutomation; Downcast eines workbook object
Am im Forum: Office-Technologien

Hallo JessicaLampe,

willkommen hier im Forum (Obligatorischer Hinweis: [Hinweis] Wie poste ich richtig?)

Mit dem Code aus

Zitat von JessicaLampe
Hallo @all,
Code:
http://www.themssforum.com/Winforms/Retrieve-Multiple/
bekommst du doch schon die passende Excel-Instanz für ein Workbook ...

Jetzt noch 'Run' aufrufen und es sollte funktionieren

Zitat
Nun habe ich das folgende Problem, das Makro lässt sich nur aufrufen, wenn ich die dazugehörige Excel-Instanz (application instance) übergebe. Ich hab aber nur Zugriff auf die untergeordneten Workbooks.
Versteh ich nicht

Ein bisschen Beispielcode aus deiner Anwendung wäre übrigens nicht schlecht.

Grüße

Thema: (gelößt) Excel COM Spalten selektieren
Am im Forum: Office-Technologien

:rtfm:

_Worksheet.Columns Property

Zitat
Returns a Range object that represents all the columns on the specified worksheet.
Range.Item Property
Zitat
RowIndex

Required Object. The index number of the cell you want to access, in order from left to right, then down. Range.Item(1) returns the upper-left cell in the range; Range.Item(2) returns the cell immediately to the right of the upper-left cell.

Thema: Auslesen von INI Files und die Umlaute
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Zitat von ujr
Allerdings bin ich nicht der OP
Ups 8)

Thema: Auslesen von INI Files und die Umlaute
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo ujr,

da es bei mit funktioniert tipp ich mal darauf, das deine Ini-Datei mit ner eigenartigen Codepage gespeichert wurde.

Keine Ahnung ob dir das weiter hilft oder du das schon probiert hast ... öffne die Datei einfach mal im Visual Studio und stell unter Datei --> Erweiterte Speicheroptionen mal was mit Unicode oder Westeuropäisch (Windows) ein.

Grüße

edit: Ich geh mal davon aus du nutzt

[DllImport("KERNEL32.DLL", EntryPoint="GetPrivateProfileStringA",  CharSet=CharSet.Ansi)]
private static extern int GetPrivateProfileString (/*[...]*/);
aus dem Codesnippet von mentalis.org.

Versuchs einfach mal mit:

[DllImport("KERNEL32.DLL")]
private static extern int GetPrivateProfileString (/*[...]*/);

Thema: Visual Studio Problem
Am im Forum: Office-Technologien

Hallo doudi,

aus deiner Beschreibund deute ich jetzt mal, dass du die GUI in einem Projekt entwickelt hast, welches als DLL kompiliert werden soll.
Debuggen kann man allerdings nur ausführbare Programme (und dazu gehört eine DLL leider nicht).

Grüße

BTW: Falsches Forum

Thema: In eigene Word Vorlage schreiben und formatieren
Am im Forum: Office-Technologien

Wenn ich richtig gesehen hab is das, was du suchst


Microsoft.Office.Interop.Word.Range.ParagraphFormat.Style
und


Microsoft.Office.Interop.Word.WdBuiltinStyle.wdStyleHeading1;

Grüße

Thema: Dienst Starten
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

?( Verweis hinzufügen ?(

Thema: Dienst Starten
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Wenn UltraVNC einmal als Service registriert wurde all you need is: ServiceController.

ServiceController svrCtrl = new ServiceController("VNC Server");
Console.WriteLine(svrCtrl.DisplayName + " is " + Enum.GetName(typeof(ServiceControllerStatus), svrCtrl.Status));

switch (svrCtrl.Status)
{
   case ServiceControllerStatus.PausePending:
      svrCtrl.WaitForStatus(ServiceControllerStatus.Paused);
      break;
   case ServiceControllerStatus.StopPending:
      svrCtrl.WaitForStatus(ServiceControllerStatus.Stopped);
      break;
   case ServiceControllerStatus.StartPending:
   case ServiceControllerStatus.ContinuePending:
      svrCtrl.WaitForStatus(ServiceControllerStatus.Running);
      break;
}

switch (svrCtrl.Status)
{
   case ServiceControllerStatus.Paused:
      svrCtrl.Continue();
      svrCtrl.WaitForStatus(ServiceControllerStatus.Running);
      break;
   case ServiceControllerStatus.Stopped:
      svrCtrl.Start();
      svrCtrl.WaitForStatus(ServiceControllerStatus.Running);
      break;
   case ServiceControllerStatus.Running:
      svrCtrl.Stop();
      svrCtrl.WaitForStatus(ServiceControllerStatus.Stopped);
      break;
}

Console.WriteLine(svrCtrl.DisplayName + " is " + Enum.GetName(typeof(ServiceControllerStatus), svrCtrl.Status));

Thema: Limitation der Arraygrösse
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo tmarbi,

um noch mehr Verwirrung zu stiften, geb ich auch noch meinen Senf dazu.

Zitat von herbivore
du müsstest dich fragen, woher das Fragmentieren kommt
Die Fragmentierung verursacht die Speicherverwaltung. Der Heap, welcher vom Garbage Collector verwaltet wird, unterteilt sich in Small Object Heap und Large Object Heap. Objekte die mehr als 85.000 bytes groß sind, werden auf dem Large Objekt Heap abgelegt. Dieser wird jedoch vom Garbage Collector, im Gegensatz zum Small Object Heap, nicht Defragmentiert, weil das Kopieren der Objekte und das Aktualisieren der Referenzen zu viel Zeit in Anspruch nehmen würde.
[Quelle: dotnetpro, 7/2007, Die Garbage Collection des .NET Frameworks]

Bsp:


class A
{
   byte[] buffer = new byte[100000];
}
Objekte der Klasse A landen auf dem Small Objekt Heap. Der buffer jedoch auf dem Large Objekt Heap.

Zitat von herbivore
ob du selber dafür verantwortlich bist und es somit auch vermeiden könntest.
IMHO also klar NEIN.

Zitat von herbivore
Wenn das nicht zum Ziel führt, könntest du die Größe des virtuellen Speichers erhöhen. Das sollte außer einem größeren pagefile auf der Platte keine negativen Auswirkungen haben.
Dies führt dich auch nicht weiter, da der verfügbare Prozessspeicher (der virtuelle Prozessraum) durch das Betriebssystem begrenzt wird. Ich geh mal davon aus, du nutzt WinXP, und dort sind es (in der 32bit-Version) stanardmäßig je Prozess 2GB. Mithilfe des /3GB Schalters in den 'Bootoptionen' kann man den Prozessspeicher allerdings auf 3GB erweitern.


Siehe dazu auch:
Prozesse beim Betriebssystem Windows
BigArray<T>, getting around the 2GB array size limit

Grüße
él toro

Thema: TryCatch bei Methode mit Rückgabewert
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo wazer317,

nicht der catch-Block muss was zurückgeben, sondern deine Funktion.

Zitat
ich dachte try/catch funktioniert losgelöst von allen Vorgaben des Codes den es umgibt
Deine Funktion wird aber auch von Code umgeben und dieser erwartet einen Rückgabewert.

Frage 2: Etwas zurückgeben. Selbst null ist da hilfreich.

Ich mach das meistens so:

public ArrayList ParameterArrayList()
{
   //ArrayList erzeugen
   ArrayList al = new ArrayList();
   try
   {
      //ArrayList mit Werten füllen
      al.Add(Wert1);
      al.Add(Wert2);
   }
   catch (Exception ex)
   {
      AllgemeineErrrorBehandlung(ex);
   }
   //ArrayList zurückgeben
   return al;
}

Grüße

Thema: Wie kann man ImageList serializieren?
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Exception wegfangen aber nicht ansehen 8)

Zitat
System.Runtime.Serialization.SerializationException wurde nicht behandelt.
Message="Der Typ System.Windows.Forms.ImageList in Assembly System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 ist nicht als serialisierbar gekennzeichnet."

Eine ImageList ist IMHO nicht serialisierbar sondern nur die Images. Stickwort: ISerializable

Thema: Generics
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo Vinx,

irgendwie versteh ich dein Problem nicht.

Zitat von Vinx
Diese 30 Methoden möchte ich ungern mit in die Logik mitschleifen.
Was verstehst du unter mitschleifen?

class Test
{
   private Service service;

   public Test()
   {
      service = new Service());
   }

   public void TestMe()
   {
      int number = 0;
      service.GetValue(ref number);
      Console.WriteLine(number);

      bool flag = false;
      Service.GetValue(ref flag);
      Console.WriteLine(flag);
    }
}
Sollte problemlos funktionieren.

Wenn du trotzdem eine generische Methode willst probier:

public T Get<T>()
{
   T result = default(T);

   object[] args = new object[] { result };

   //ParameterModifier[] modifiers = new ParameterModifier[] { new ParameterModifier(1) };
   //modifiers[0][0] = true;
   service.GetType().InvokeMember("GetValue", BindingFlags.Public | BindingFlags.Instance | BindingFlags.InvokeMethod, null, service, args, /*modifiers*/ null, null, null);

   return (T)args[0];
}

Thema: Boarders in Zellen
Am im Forum: Office-Technologien

Hallo Pegasus2003,

möchtest du einen Rahmen um die Zellen zeichnen (Microsoft.Office.Interop.Excel.Range.Borders[XlBordersIndex]) oder diese nur markieren?

BTW: In welchem Typ soll bitte 'Draw Borders' verfügbar sein?

cellRange = tmpCurrentWorksheet.get_Range("A3", "A3");
ist gleichbedeutend mit

cellRange = tmpCurrentWorksheet.get_Range("A3", Type.Missing);

Thema: Nur Namen statt Pfade lesen
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Nix, ich hab nur fehlendes ergänzt/korrigiert, darum 8)

Thema: Nur Namen statt Pfade lesen
Am im Forum: Basistechnologien und allgemeine .NET-Klassen


string[] nul = Directory.GetDirectories(@"C:\");
DirectoryInfo[] nul = Directory.GetDirectories(@"C:\");
Selbe Methode, unterschiedlicher Returntype?

Directory.GetDirectories
Liefert IMHO nur string[] ...

Mein Vorschlag

string[] directories = Directory.GetDirectories(@"C:\");
foreach (string directory in directories)
{
        lstTags.Items.Add(Path.GetDirectoryName (directory));
}

Thema: Excel Schutz & Late Binding
Am im Forum: Office-Technologien

Hallo BeZi,

[Hinweis] Wie poste ich richtig?Punkt 5

Protect & Unprotect sind keine Setter, sondern Methoden, also statt

BindingFlags.SetProperty

BindingFlags.InvokeMethod
verwenden.

Wenn du Late-Binding benutzt, musst du keine Argumente übergeben. Nicht mal Type.Missing.


objSheets.getType().InvokeMember("Unprotect", BindingFlags.InvokeMethod, null, obSsheets, null);
sollte funktionnieren. Das gleich gilt für Protect!

Grüße
él toro

Thema: Hilfe bei Objektverweiss
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo Kleiner Progger,

und willkommen hier im Forum.

Der obligatorische Hinweis: [Hinweis] Syntaxfehler selbst lösen (Compilerfehlermeldungen)

Zitat von Kleiner Progger
Ein Objektverweis ist für das nicht statische Feld, Methode oder Eigenschaft von "Save.Form1.Pfad" erforderlich.
Sagt eigentlich alles aus!

Du kannst nicht aus einer statischen Methode auf eine Membervaiable eines Objektes zugreifen.

Grüße
él toro

Thema: ServiceStartMode setzen Automatic/Manual
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Bau erstmal ein paar Consolenausgaben ein. Ansonsten wüsst ich jetzt erstmal nicht weiter

Thema: ServiceStartMode setzen Automatic/Manual
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Keine Exception, keine Fehler, keine Einträge im Ereignisprotokoll?

Thema: ServiceStartMode setzen Automatic/Manual
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Was machtn Right(...) und wie sieht deine ini aus?

Thema: ServiceStartMode setzen Automatic/Manual
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Zitat
ServiceStartMode wird vom ServiceInstaller verwendet, [...]
Zitat
Die ServiceInstaller-Eigenschaftenwerte können nach der Installation nicht mehr geändert werden. Um den StartType zu ändern, muss entweder der Dienst deinstalliert und anschließend neu installiert werden, oder es müssen die Einstellungen manuell mithilfe des Dienststeuerungs-Managers geändert werden.

Evtl. wäre es noch möglich den Wert über die Registry zu ändern ...

Thema: Fehler trotz Fehlerkorrektur bei GPS Programm
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo getle87,

eins Vorweg: Ich hab von GPS nicht wirklich Ahnung X(

1. Möglicherweise gibt

GPSPort.ReadExisting()
nicht null sondern string[0] zurück?

String.IsNullOrEmpty()
könnte dir hilfreich sein

2. Du bewegst dich tatsächlich so schnell 8)

3. Ist distance manchmal NaN?

4. Da der Port puffert müsstest du auch puffern und jeweils beim '$' trennen.

Das Projekt ist sicher interessant.

Zum nachvollziehen deiner Berechnungen wären ein paar Beispieldaten interessant, evtl. als CSV, dann kann man den Kram gleich mal einlesen ...

Thema: Mehr als ein Event löst Exception aus
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

[Hinweis] Wie poste ich richtig?Punkt 1.2

Thema: Problem mit if-Anweisung und eigener erstellter Klasse
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hast Recht, hab deinen Code wohl zu schnell überflogen

Ich hab deinen Code mal Debugged und des Rätsels Lösung (siehe Bild) ...

Müsste dir eigentlich beim Debuggen aufgefallen sein ?(

Thema: Problem mit if-Anweisung und eigener erstellter Klasse
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo getle87,

das Problem ist deine Abbruchbedingung in der while-Schleife von createarray.

Beim Debuggen müsste dir aufgefallen sein, dass bei counter == 5 nur 4 Zeichen kopiert worden sind.

Ich würd dir für derartiges immer for-Schleifen empfehlen

Grüße

él toro