On my last vacation I used 2 digicams, but had one set to a wrong timezone accidently. That’s why I cannot copy the pictures of both cameras to one single folder, sort by date and rename. In short terms: I cannot join the pictures.
Searched the internet, but found tools, which can set the date to a specific date only, but cannot correct the timezone (e.g. add 6 hours to the file’s existing modification date).
So I had to write my own solution. Find the download links below, and feel free to modify the sources. This is a MS VS2008 project, built for .NET Framework 2.0
Hint: Please note, that usage of this tool is your own responsibility!
—
Ich hatte im Urlaub 2 Digitalkameras mit, wobei eine noch irrtümlich die Zeitzone vom vorangegangenen Urlaub gesetzt hatte. Resultat: ich kann nun nicht mehr einfach die Bilder der beiden Kameras in ein Verzeichnis kopieren, sie nach Datum sortieren, und umbenennen. Kurz: ich kann sie nicht korrekt zusammenfügen.
Zuerst müßte ich das ModificationDate von Kamera A um 6 Stunden (sprich: die Zeitzone) korrigieren.
Im Internet fand ich nur Tools, die das Datum auf einen vorgegebenen Wert setzen, daher habe ich das selbst in die Hand genommen. Die Download Links sind unten zu finden, die Sourcen dürfen frei modifiziert werden. Es handelt sich um ein MS VS2008 Projekt, und kompiliert für .NET Framework 2.0.
Hinweis: die Verwendung erfolgt auf eigenes Risiko!
Habe mich in letzter Zeit, dank UML Simulation wieder mehr mit CodeDom und runtime Compilieren beschäftigt. Bin dabei auf folgendes draufgekommen. (Hab vermutlich mal wieder die Hilfe nur halbe gelesen ).
ich erzeuge aus Enterprise Architect mein Codefile
ich erstelle CodeDomProvider und CompilerParameter
ich füge alle “External References” im CompilerParameter hinzu
ich Compiliere und hole mir den Type der Klasse die ich benutzen möchte
bis hier hin ist alles richtig, es geht ab hier zwar noch Fehlerfrei weiter aber…
ich erzeuge mit Hilfe von: Activator.CreateInstance eine Instanz
da ich weiß das die Instanz vom Interface X abgeleitet ist, spreche ich die Instanz als X an
Hier kommt der Fehler,..
wenn ich jetzt Funktionen anspreche die auf eine “External References” verweisen bekomme ich einen “could not load Assembly xxx,… file not found”
Wie schon in Schritt 5. beschrieben liegt hier der eigentliche Fehler, welcher dann in Schritt 7. erst auftaucht. Um die Instanz und auch alle “External References” zu bekommen, sollte man die Instanz nicht über Activator.CreateInstance erstellen, sondern über CompilerResult.CompiledAssembly.CreateInstance(Type.FullName) da hier noch die “Externen Referencen” richtig mitgeladen werden.
English:
Have done some things in CodeDom and runtime compiling recently, for UML Simulation. Found the following at the time. (presumably I only rushed through the help again ).
I create a Codefile out of Enterprise Architect
I create a CodeDomProvider and CompilerParameter
I add all “External References” to the CompilerParameter
I compile it and the get the type of the class I want to use
till here everything is OK, I’ll still get no errors but…
I create an instance using: Activator.CreateInstance
because I know the instance inherits the interface X I cast it to X
Here we go with the errors,..
If I now use a function which is using something from an “External Reference”, I get a “could not load Assembly xxx,… file not found” error.
Like I allready told, the real error is in step 5. but it shows up in step 7. To be able to use “External Referneces” don’t use the Activator.CreateInstanc to get an instance, rather use CompilerResult.CompiledAssembly.CreateInstance(Type.FullName) because this loads also the “External References”.
Wer ein Windows Service von C# nach VB.Net konvertiert, möchte vielleicht eine Übersetzungshilfe verwenden wie von Developerfusion.
C# Code in die Textbox kopieren, “Konvertieren” drücken, und den VB-Code ins Projekt übernehmen.
Es gibt mehrere Dinge, auf die man aufpassen muß; Und auf eines möchte hier eingehen: das Kommando ‘STOP’.
In der C# Welt beendet der Befehl “Stop” das Windows Service. Aber in VB.Net wird der Debugger lediglich gebeten, an diesem Punkt eine Pause einzulegen. Das ergibt eine Fehlermeldung, aber ganz sicher kein Ende.
Abhilfe schafft hier der Umstieg auf ‘Me.Stop()‘.
+–+–+–+–+–+–+–+
When porting a Windows Service from C# to VB.Net you might use a translation tool like Developerfusion.
It’s just to simple: copy the C# code into the Textbox, press ‘Convert’ button and receive the VB.Net code.
Having a couple of things to be carefull with, there’s one I’d like to mention here: the command ‘STOP’
When using ‘Stop’ in C#, you force Termination of the Windows Service, while in VB.NET you just tell the Debugger to stop at that point.
Save yourself some painfull memories by using ‘Me.Stop()‘.
Adobe macht es dem Programmierer nicht sehr einfach, still und heimlich ein PDF-Dokument auszudrucken. Zwar läßt sich der Acrobat Reader per Kommandozeile ansteuern, jedoch wird er am Ende des Druckvorgangs das Fenster offen lassen, und so eine Interaktion des Benutzers notwendig machen.
Es gibt nun also 3 Möglichkeiten:
1) statt dem Reader eine kostenpflichtige Ersatzkomponente verwenden.
2) statt Acrobat Reader wird Foxit benutzt. Dieses akzeptiert Befehle über die Kommandozeile UND beendet sich nach dem Druck.
Bsp: “c:\…\Foxit Reader.exe” /p “D:\PDF\ContactUpdater.pdf”
3) Acrobat Reader via DDE ansprechen. DDE = Dynamic Data Exchange.
Zwar wird DDE vom .NET Framework nicht per default unterstützt, jedoch gibt es eine Open-Source Library namens NDde von codeplex.
Der Reader unterstützt folgende DDE Befehle:
CloseAllDocs, DocClose, DocGoTo, DocGoToNameDest, DocOpen, FileOpenEx, FilePrintEx, FilePrintSilentEx, FilePrintToEx, and AppExit
Eine C#-Klasse, die via NDde ein PDF Dokument zum Standarddrucker sendet, gibt es hier: LL.PDFPrint
Wichtig: erste Tests ergaben, daß dieses erst ab Versionen 7.0 funktioniert. Bei Version 6.0 wird nur die Applikation geöffnet, sie scheint aber keine DDE-Befehle anzunehmen.