Tipps & Tricks: #import durch #include ersetzen

Nicht wenige verwenden, wie ich auch COM Komponenten, aus dem eigenen Haus oder von Fremdherstellern. Eingebunden werden diese COM-Komponenten oft genug über das #import Statement, das ja eine wirklich simple Integration erlaubt.

Lästig ist nur, dass diese Komponenten nicht auf allen Rechnern in den selben Verzeichnissen liegen. Das macht es nicht leicht Projekte und Entwicklungmaschinen so auszustatten, dass alle Projekte gleich zu kompilieren sind. Da fängt es schon an, dass ein Entwickler ein englisches OS (C:\Program Files), ein andere ein deutsches (C:\Programme) und der dritte Entwickler benutzt das Installationverzeichnis der zu entwickelnden Komponente (C:\Dev\Project\Bin).

Aus diesem Grund bin ich dazu übergangen das #import Statement nur einmal auszuführen, und die entstehenden .tlh und .tli Dateien direkt in das Projekt aufzunehmen.
Zu schnell? OK, also schrittweise:

  • Ich binde die Komponente also wie gewohnt per #import ein.
  • Die entstehenden .tlh und evtl. auch die .tli Dateien werden in das Projektverzeichnis kopiert und in das Projekt aufgenommen.
  • Das das #import Statement wird nun auskommentiert und statt dessen entsprechende #include Statements eingesetzt.
  • Nachdem man das auch korrekt mit entsprechenden Versionsangaben der Komponente dokumentiert hat und auch dieses Verfahren in die Projektbeschreibung aufgenommen hat ist man fertig!

Vor- und Nachteile:

  • Nicht nur, dass dieses Projekt unabhängig kompiliert werden kann. Das Kompilieren ist auch noch schneller, denn die (an sich) statischen .tlh und .tli Dateien werden nicht immer neu erzeugt.
  • Vorrausetzung ist hier sicherlich, dass es sich hier um Komponenten handelt, deren Interface sich nicht mehr verändert, und man muss bei einem Update der Komponente natürlich auch manuell die neuen .tli und .tlh Dateien einbauen.
  • Ein weiterer Vorteil ist auch, dass das Interface fest eingebunden wird, das auch für die Auslieferung festgelegt wird und keine alte/oder neuere Version zu Überraschungen führt.
  • Was auch zu dem genialen Verhalten führt, dass man aus dem Sourcecontrol System eine Software Version erzeugen kann, die noch mit einer älteren/abweichenden COM Komponente erzeugt wurde ohne diese auch noch mal installieren zu müssen!

Dive-Deeper auch im Fernsehen

Jetzt ist schon Freitag und damit ist der Tag 4 fast vorbei für mich hier bei Dive Deeper, dem 15. Weltjugendkongress der Baptisten. Die Zeit ist verflogen wie Nichts. Hinter mir liegen jetzt 2 Frühschichten und 2 Spätschichten. So ca. 42 Stunden Arbeit und 15 Stunden Schlaf in den letzten drei Nächten, der Rest bestand aus Duschen, Essen, viel Fun und Transferzeiten.

Dieses Event hier auf dem Gelände der Leipziger Messe ist phänomenal. 89 Nationen, 6600 Leute, davon 2629 in einer Zeltstadt, tolle Musik, tolle Gottesdienste, viele alte Bekannte, die man wiedersieht! Und morgen werden wir ein Live-Event mitten in Leipzig haben.

Wer selbst einen Eindruck von einer Veranstaltung haben möchte, der kann am Sonntagmorgen um 10:00 Uhr den Abschlußgottesdienst im MDR sogar live im Fernsehen verfolgen, oder wem das zu früh ist, der kann es sich ja aufzeichnen 😉
Hier der entsprechende Programmhinweis:
http://www.mdr.de/tv/programm/prog%5Fdetail+43207000251937.html

Anmerkung 06.08.2008:
An diesem Link finden sich jetzt zwei gute kurze Reportagen (einmal Fernsehen und einmal Radio) über Dive-Deeper.
Ansonsten finden sich auch Bilder des Events unter http://pics.dive-deeper.org/
Eine ganze Sammlung von Videos, Artikeln, Beiträgen und Bildern hier http://divedeeper.wordpress.com/

Ich tauch dann mal bis zum Ende der Woche ab: Dive Deeper

Ab Dienstagmorgen bis Sonntagmittag werde ich mit meiner Frau als freiwilliger Mitarbeiter am 15. Weltjugendkongress der Baptisten unter dem Thema Dive Deeper in Leipzig sein.

Ich bin richtig gespannt und auch schon etwas nervös an solch einem Event, mit über 6000 Leuten aus aller Herren Länder, mitarbeiten zu können. Das ganze wird auf dem Gelände der Leipziger Messe stattfinden.
Aus meiner Gemeinde (EFG-Meerholz) werden auch über 15 Jugendliche plus Pastor teilnehmen.

Und auch meine drei Töchter werden dort sein:
Die Jüngste im Kids-Camp, die Mittlere alsTeilnehmer und meine älteste Tochter mit Ehemann als Familiengruppenleiter.
Also ein richtiges Familientreffen 😉 obwohl wir uns wahrscheinlich kaum sehen werden…

VS Tipps & Tricks: Fehler in Custom Build Steps ermitteln

Manchmal macht man ja schon komplexere Sachen in den Custom-Build-Steps, wie zum Beispiel auch das Erzeugen der HTML-Help Include Datei. Aber es geht ja noch viel komplizierter, zumindest benutze ich solche komplexen Custom-Build Funktionen ziemlich häufig!

Was nun, wenn man eine Fehlermeldung erhält in solch einem Custom-Build-Step, aber gar nicht weiß wo der Batch eigentlich aussteigt, oder was er gerade getan hat ❓ Besonders wenn die Ausgabe im Build-Fenster so informativ ist wie:
Das System kann den angegebenen Pfad nicht finden.

Das eigentliche Problem ist, dass die Batch-Zeilen bei der Ausführung nicht angezeigt werden.
Man könnte meinen, dass Visual Studio dies mit einem mystischen Trick macht. Sieht man sich jedoch die Build-Log Datei an, so sieht man, dass vor einen Custom-Build-Step einfach immer ein @echo off eingebaut wird.
Was spricht eigentlich dagegen als erste Zeile ein @echo on in den Custom-Build einzusetzen? Nichts!

Gesagt getan!
Die Folge: Jede Zeile des Batches, der im Custom-Build durchlaufen wird, erscheint brav in der Build-Ausgabe. Einen Fehler zu finden, bei man z.B. einen Pfad falsch mit Makros zusammengebaut hat ist nun denkbar einfach.

TFS-2008 mit Visual Studio 2005 und anderen älteren Entwicklungssystemen benutzen

Ist man eigentlich gezwungen Visual Studio 2008 zu verwenden wenn man Team Foundation Server 2008 nutzt?

Nein! Wenn man Visual Studio 2005 und 2008 nutzt, wie auch ich für einige Projekte, dann kann man ohne weiteres trotzdem aus allen Systemen auf TFS-2008 zugreifen.
Man muss nur den passenden Team Explorer installieren. D.h. für Visual Studio 2005 installiert man einfach den Team Explorer 2005. Der 2005er Explorer steht übrigens auch kostenlos zum Download zur Verfügung, wer evtl. keine Version des TFS-2005 hat (http://www.microsoft.com/downloads/details.aspx?FamilyID=46473C2A-BB85-4461-BB27-4792A5DEF222&displaylang=ja&displaylang=en)

Es ist klar, dass man in diesem Fall einige Features des TFS-2008 nicht benutzen kann, bzw. nur über den Team Explorer 2008. Aber das ist ja auch nicht weiter tragisch.
Tunlichst vermeiden sollte man aber neue Team-Projekte aus dem 2005er Explorer heraus anzulegen, das schlägt bei mir fehl.  Also neue TFS-Projekte zuerst im Team Explorer 2008 anlegen und dann mit Visual Studio 2005 bearbeiten.

Das Source Control System von TFS-2008 lässt sich übrigens mit den entsprechenden Microsoft Source Code Control Interface (MSSCCI). Ein entsprechendes Plugin gibt es hier zum Download: http://www.microsoft.com/downloads/details.aspx?familyid=faeb7636-644e-451a-90d4-7947217da0e7&displaylang=en. Diese Liste der unterstützen Systeme ist lang:

  • Visual Studio .NET 2003
  • Visual C++ 6 SP6
  • Visual Visual Basic 6 SP6
  • Visual FoxPro 9 SP1
  • Microsoft Access 2003 SP2
  • SQL Server Management Studio
  • Sparx Systems Enterprise Architect 6.1
  • Sybase PowerBuilder 10.5
  • Toad for SQL Server 2.0

VS Tipps & Tricks: Kontextmenüs in Visual Studio anpassen

Man kann ja ohne weiteres Toolbars und die Menüs in Visual Studio anpassen, was ich auch gerne nutze.

Besonders interessant ist es aber auch die verschiedenen Kontextmenüs anzupassen. Dazu muss man zu einem kleinen Trick greifen, denn die Kontext Menüs stehen normalerweise nicht automatisch im Zugriff beim Anpassen der UI.

  • Man wählt Tools -> Customize -> Toolbars
  • Dort dann Context Menus auswählen -> Kontextmenü

Es öffnet sich nun ein neuer Toolbar, in dem die Kontextmenüs alle erscheinen und können wie gewohnt angepasst werden.

Gar nicht schwierig, man muss nur wissen wie man dran kommt 😉

Probleme beim Update auf WordPress 2.6 (Permalinks und Update)

Das Update auf die WordPress Version 2.6 war die erste Version, die mir richtig Ärger gemacht hat.

Erstes Problem:
Nach der Installation der neuen Dateien habe ich …/wp-admin/upgrade.php aufgerufen. Das DB-Update wurde angefangen (so die Meldung). Allerdings kam es niemals zu einer Meldung, dass das Update durchgeführt wurde. Nach einer gewiesen Zeit war immer nur noch das WordPress Logo zu sehen und kein Script mehr aktiv. Ich musste diese Seite bestimmt zwanzig mal aufrufen, biss ich endlich die Meldung bekam, dass die Datenbank geändert wurde.
Ich habe keine Ahnung bis heute woran dies lag.

Zweites Problem war weitaus ekelhafter:
Alle Permalinks (Tags und Kategorien) führten zu einem Fehler 404. Durch etwas googlen fand ich diesen Eintrag: http://wordpress.org/support/topic/189058
Lösung 1 entfiel, also habe ich die Lösung 3 versucht, was aber irgendwie nicht funktionierte.
Also Lösung 2, wodurch jetzt leider die Kategorie Links und Tag Links sich verändern. Schade.

Beim nächsten Mal, werde ich mal erst 10 Tage vergehen lassen bis ich wieder ein WordPress Update durchführe 🙁

Microsoft Visual Studio 2008 Service Pack 1 Release Candidate wurde veröffentlicht

Seit dem 06.07.2008 steht für Visual Studio 2008 auf Microsoft Connect ein Download für den Release Candidate des Microsoft Visual Studio 2008 Service Pack 1 zur Verfügung.

Dann kann man ja hoffen, das es bis zur Freigabe des SP1 nicht mehr lange dauert… 😉

Anmerkung: Es ist möglich, dass dieser Download nur Teilnehmern des SP1 Beta Programms zur Verfügung steht.

MFC Fenster in anderen Applikationen verwenden…

Manch ein Programmierer kommt auf die Idee und entwickelt ein Plugin mit der MFC für ein anderes Programm. Dass Plugin oder die entsprechende Funktionalität soll alleine in einer Standard-DLL leben. Die Schnittstelle wird bewusst schmal und einfach gehalten. Manche dieser kleinen Tools müssen/wollen nun auch ein Fenster nicht modal anzeigen.
Kein Problem, einfach CWnd::Create, oder CDialog::CreateIndirect und schon hat man sein Fenster.

Eines muss an dieser Stelle klar sein ❗
Man verlässt sich in einem solchen Fall, dass die hostende Anwendung eine Messageloop bereitstellt. Andernfalls bekommt das Fenster keine Nachrichten. OK!

Was einem aber auch klar sein muss in diesem Fall ❗
Man kann PreTranslateMessage nicht mehr verwenden. Das würde nur gehen, wenn man eine Extension DLL hat, oder die hostende Anwendung als auch die DLL beide die MFC als Shared DLL in derselben Version verwenden.
Damit ist nun auch verbunden, dass evtl. Tooltips in diesem Fenster ein sehr eigenwilliges Leben führen werden.

Es gibt einfach keinen vernünftigen Weg sich in die Messageloop eines Hosts auf einfache und vernünftige Art einzuklinken.
Ein Ansatz an dieser Stelle wäre sicherlich ein entsprechender WH_GETMESSAGE Hook. Denkbar wäre dann die entsprechende Nachricht abzufangen und an die eigenen Fenster via PreTranslateMessage anzubieten, sofern eben die eigenen Fenster den Focus haben oder die Nachricht für eines dieser eigenen Fenster oder Kindfenster bestimmt sind. Eben genauso wie es die MFC in seiner Messageloop macht. Dieses Verfahren wird auch für ActiveX Controls in der MSDN im KB Artikel 194292 empfohlen.

Siehe auch Wann Message Reflection nicht funktioniert!