C++ Projekt -> Versionierung

Diese Anleitung beschreibt, wie Sie einem TwinCAT C++ Projekt nachträglich eine Versionierung hinzufügen.

In Fett ist im Quellcode jeweils der zu ändernde Code hinterlegt.

C++ Projekt. Für das Beispiel wird „Untitled1“ als C++ Projektname verwendet.
Zusätzlich soll ein leeres, neues Projekt mit versioniertem C++ Projekt angelegt werden. Dieses dient als Kopiervorlage.
1. Öffnen Sie die Datei Untitled1.vcxproj in einem Editor.
2. Nehmen Sie folgende Ergänzung vor:
<PropertyGroup Label="Globals">
<ProjectGuid>{….}</ProjectGuid>
<RootNamespace>Untitled1</RootNamespace>
<Keyword>Win32Proj</Keyword>
<AutomaticRetargetPlatformVersion>true</AutomaticRetargetPlatformVersion>
</PropertyGroup>
<PropertyGroup Label="TcGeneral">
<TcGeneralUseTmx>true</TcGeneralUseTmx>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
3. Übertragen Sie aus dem neuen Projekt die Dateien Untitled1.rc und Untitled1W32.rc in das zu migrierende Projekt; überschreiben Sie dabei die Datei Untitled1.rc.
4. Öffnen Sie das Projekt.
5. Wählen Sie unter TwinCAT UM Files -> Kontextmenü / Add Existing Items die Datei Unititled1W32.rc aus und fügen Sie sie dadurch zu dem Projekt hinzu.
6. Diese Datei muss nur für TwinCAT UM Plattformen gebaut werden, weswegen sie ansonsten ausgeschlossen werden sollte für den Build-Prozess. Dieses geschieht über Rechts-Klick und Eigenschaften:
C++ Projekt -> Versionierung 1:
7. Öffnen Sie den TMC Editor.
8. Setzen Sie den Namen der Classfactory sowie die Version auf „0.0.0.1“.
C++ Projekt -> Versionierung 2:
9. Löschen Sie unter Deployment alle Einträge.
C++ Projekt -> Versionierung 3:
10. Verändern Sie im Header Modul1.h DECLARE_IPERSIST_LIB():
public:
DECLARE_IUNKNOWN()
DECLARE_IPERSIST_LIB()
DECLARE_ITCOMOBJECT_LOCKOP()
11. Ergänzen Sie im Quellcode Modul1.cpp:
#pragma hdrstop
#include "Module1.h"
#include "Untitled1Version.h"

#ifdef _DEBUG
12. Ergänzen Sie im Quellcode Modul1.cpp:
END_INTERFACE_MAP()

IMPLEMENT_IPERSIST_LIB(CModule1, VID_Untitled1,
CID_Untitled1CModule1)
IMPLEMENT_ITCOMOBJECT(CModule1)
IMPLEMENT_ITCOMOBJECT_SETSTATE_LOCKOP2(CModule1)
13. Rufen Sie den Code Generator auf.
C++ Projekt -> Versionierung 4:
14. Verändern Sie in der Datei Untitled1Classfactory.cpp:
CUntitled1ClassFactory::CUntitled1ClassFactory() : CObjClassFactory()
{
TcDbgUnitSetImageName(TCDBG_UNIT_IMAGE_NAME_TMX(SRVNAME_UNTITLED1));
#if defined(TCDBG_UNIT_VERSION)
TcDbgUnitSetVersion(TCDBG_UNIT_VERSION(Untitled1));
#endif //defined(TCDBG_UNIT_VERSION)
}
15. Stellen Sie in den Projekteigenschaften im Tab Tc Sign die Signierung um. Schalten Sie dafür SHA1 signing aus und TwinCAT signing an; stellen Sie gleichzeitig TwinCAT-Nutzerzertifikat und Passwort bereit.
C++ Projekt -> Versionierung 5:
16. Triggern Sie den Rebuild des Projektes.
Das Ergebnis ist ein C++ Projekt, welches eine Versionierung unterstützt.

Falls ein Modul Online-Change fähig gemacht werden soll, kann dieses durch die folgende Anleitung erreicht werden.