Mit C# und Word Serienbriefe erstellen

Wie dem einen oder anderen ja vielleicht bekannt ist, kann man die ganzen Office-Anwendungen von Microsoft ja aus vielen Programmiersprachen fernsteuern. Dazu gibt es eine COM-Schnittstelle (leider :() Die ist zwar nicht gerade modern oder praktisch, aber sie funktioniert relativ gut.

Theoretisch geht das auch mit .NET 2.0, praktisch gesehen möchte man es aber erst mit .NET 4.0 probieren: Die Funktionen von Office nehmen oft wahnsinnig viele Parameter (15 sind da keine Seltenheit), und vor .NET 4.0 gab es keine optionalen Parameter, daher musste man für alles, was man nicht benutzen wollte Type.Missing angeben. Das war natürlich extrem unpraktisch. Mit dem neuen .NET ist Type.Missing jetzt der Standard-Wert der optionalen Parameter, und das ganze ist deutlich benutzbarer geworden.

Ich hatte mir zu Ziel gesetzt einen kleinen Serienbrief-Generator in C# zu schreiben. Ich weiß, Word hat so eine Funktion schon eingebaut, aber die Daten für die Briefe sollten automatisch generiert werden, und es hat mich auch einfach interessiert 🙂 Die Briefe basieren auf einem Template, was einfach ein normales Word-Dokument ist, das Platzhalter enthält. (Die Platzhalter sind auch einfach nur Text, keine Magie dahinter…) Diese Platzhalter werden durch ein einfaches Suchen&Ersetzen umgewandelt, und danach wird das Dokument ausgedruckt. Funktioniert auch recht gut, aber es gibt ein paar seltsame Dinge, auf die ich kurz eingehen will:

Weiterlesen

Fehler in XNA Audio API?

Mit der Audio API von XNA schlage ich mich ja schon länger herrum… Immer wieder erzeugen meine Versuche die Lautstärke zu ändern(auf gültige Werte versteht sich…) seltsamme Fehler. Ich hatte länger mit einer CrossThreadCallMessagingExeption zu kämpfen, bis sie auf einmal nicht mehr auftrat.

Ich hatte das Problem als erledigt abgetan. Heute kommt beim starten plötzlich ein Fehler: Die Zeile

SoundEffect.MasterVolume = 0.15f;

Erzeugt eine AccessViolationExeption!

Es wurde versucht, im geschützten Speicher zu lesen oder zu schreiben. Dies ist häufig ein Hinweis darauf, dass anderer Speicher beschädigt ist.

??? Was soll das denn heissen? Im Internet finden sich Hinweise, dass dieses Problem auftritt wenn man in .NET mit unsafe Code(sprich Zeigern) arbeitet und diese dann in auf Systemspeicher zeigen. Da .NET nicht für unsafe Code gemacht ist, geht es davon aus, dass der RAM einen Fehler hat und deshalb ein (interner) Zeiger kaputt ist.

Weiterlesen