C++ 2005

ftComputing : Programme für die fischertechnik-Interfaces und -konstruktionskästen
  
ftComputing.de
Home
Back
Sitemap
Index
Links
Impressum
Mail
 

Allgemeines

C++ 2005 ist etwas für Fans : 

  • Nostalgiker, die dem alten VC++ 6.0 nachtrauen und hoffen, hier mit links und der Win32 Version von C++ in den neuen Zeiten zurechtzukommen
  • Für solche, die C# für Java-Verschnitt halten und etwas für harte Kerle suchen, aber sich trotzdem mit .NET schmücken wollen : Hier ist die CLR Version von C++ 2005 richtig
  • Und für Programmieranfänger, die sich gleich in eine der "interessantesten und vielfältigsten Programmiersprachen, die es z.Zt. gibt" (Andre Willms) stürzen wollen.

Literatur

Die Literatur zum Thema zum Thema ist sehr übersichtlich :

  • Die mitgelieferten Helpdateien mit ihren sehr instruktiven Kapiteln sind für C/C+ Profis, die von C/C++ umsteigen wollen, gut geeignet.
  • Für Programmieranfänger und auch Hobbyisten :
    Andre Wilms : " Einstieg in Visual C++ 2005" Galileo Computing ISBN 978-3-89842-835-4 für 35€
    einschl. der MS CD mit C++ 2005 Express

Hier nun ein paar Hinweise, wie man mit C++ 2005 die ROBO und die Intelligent Interfaces programmieren kann.

C++ 2005 Win32 Console - umFish40.DLL

#include<iostream>
using namespace std;
#include "umFish40C2005.h"

int main() {
  int ft;
  cout << "Hello umFish40" << endl;
  ft = rbOpenInterfaceUSB(0, 0);
  rbSetMotor(ft, 3, 1);
  cout << "Motor laeuft bis I1 == true" << endl;
  while(!rbGetInput(ft, 1)) {}
  rbSetMotor(ft, 3, 0);
  rbCloseInterface(ft);
  cout << "--- FINITO ---" << endl;
  return 0;
}

Erstes ROBO Interface an USB : Motor an M3 läuft bis Taster an I1 == true;
Wenn man dann noch ein WinSDK* zur Verfügung hat, stellt sich eine wohlige Nostalgie ein. Probiert habe ich es mit dem von V++ 6.0, dann geht der Sleep wieder, aber nicht das GetAsyncKeyState, aber es gibt ja noch ein spezielles Download.

* Genaueres in der C++ 2005 Hilfe unter der Überschrift : "Verwenden von Visual C++ Express Edition mit dem Microsoft Platform SDK".

Anlegen des Projekts

  1. Erstellen leeres Projekt Win32 | Console
  2. umFish40.LIB und umFish40C2005.H ins Projekt Verzeichnis kopieren und dem Projekt hinzufügen. Das Meckern über das umFish40.LIB einfach ignorieren.
  3. Einfügen einer leeren CPP Datei und dann s.o.

C++ 2005 CLR Console - FishFace2005.DLL

#include "stdafx.h"
using namespace System;
using namespace FishFace40;

int main(array<System::String ^> ^args) {
  FishFace ft;
  Console::WriteLine("Hello FishFace");
  try{
    ft.OpenInterface(IFTypen::ftROBO_first_USB, 0);
    Console::WriteLine("Ende : ESC-Taste");
    while(!ft.Finish()) {
      ft.SetLamp(Out::O1, Dir::On);
      ft.Pause(444);
      ft.SetLamp(Out::O1, Dir::Off);
      ft.Pause(333);
    }
  }
  catch(FishFaceException^ e) {
  Console::WriteLine(e->Message);
  }
  ft.CloseInterface();
  Console::WriteLine("--- FINITO ---");
  return 0;
}

Erstes ROBO Interface an USB : Lampe an O1 blinkt, bis ESC-Taste gedrückt wird.

Anlegen des Projektes

  1. Erstellen Projekt CLR | Console
  2. Allgemeine Eigenschaften | Verweise : FishFace2005.DLL eintragen.
  3. using namespace FishFace40; und dann siehe oben und weiter nach Belieben

C++ 2005 CLR Windows Forms - FishFace2005.DLL

namespace FishFaceForms {

using namespace System;
using namespace System::ComponentModel;
using namespace System::Collections;
using namespace System::Windows::Forms;
using namespace System::Data;
using namespace System::Drawing;
using namespace FishFace40;

public ref class Form1 : public System::Windows::Forms::Form {
public: ......
private: 
FishFace^ ft;
Button^ cmdAction;
Button^ cmdEnde;
Label^ lblStatus;
System::ComponentModel::Container ^components;
......
  Void Form1_FormClosing(System::Object^ sender, 
                         System::Windows::Forms::FormClosingEventArgs^ e) {
    if(!cmdAction->Enabled) e->Cancel = true;
  }
  Void cmdEnde_Click(System::Object^ sender, System::EventArgs^ e) {
    if(cmdAction->Enabled) this->Close(); else ft->NotHalt = true;
  }
  Void cmdAction_Click(System::Object^ sender, System::EventArgs^ e) {
    try {
      ft = gcnew FishFace;
      ft->OpenInterface(IFTypen::ftROBO_first_USB, 0);
      cmdAction->Enabled = false;
      lblStatus->Text = "Bei der Arbeit";
      cmdEnde->Text = "HALT";
      Action();
      ft->ClearMotors();
      lblStatus->Text = "Auf ein Neues";
    }
    catch (FishFaceException^ e) {
      lblStatus->Text = e->Message;
    }
    ft->CloseInterface();
    cmdAction->Enabled = true;
    cmdEnde->Text = "ENDE";
  }
  Void Action() {
    while(!ft->Finish()) {
      ft->SetLamp(Out::O1, Dir::On);
      ft->Pause(333);
      ft->SetLamp(Out::O1, Dir::Off);
      ft->Pause(333);
  }    }};}

Erstes ROBO Interface an USB : Lampe an O1 blinkt bis ESC-Taste oder HALT-Button (cmdEnde) gedrückt wird. Hier wurden - im Gegensatz zur CLR Console Lösung - Referenzen auf FishFace verwendet : paßt besser in den Kontext und ist bei komplexeren Programmen auch interessanter. Ansonsten noch einiges DrumRum um ein "Abwürgen" des Programmes über ENDE Button (und x) während der while Schleife zu unterbinden. Das Programm würde dann "im Dunklen" weiterlaufen.

Anlegen des Projekts

  1. Erstellen Projekt CLR - Windows Forms
  2. Allgemeine Eigenschaften | Verweise FishFace2005.DLL eintragen
  3. using namespace FishFace40 und dann s.o. - nachdem man die entsprechenden Controls angelegt hat.

Das Programm wurde hier komplett in der standardmäßig angelegten Form1.h geschrieben. Der Übersichtlichkeit wegen (und faulheitshalber)

Downloads

Die vollständigen Sources zu den Programmen finden sich in VC2005.ZIP

Für das Win32 Console Beispiel ist noch umFish40.DLL erforderlich. Eine Dokumentation dazu ist im ZIP enthalten.

Für die weiteren Programme wird FishFace2005.DLL benötigt. Die DLL ist in C# 2005 geschrieben und ist von C++ 2005 natürlich nutzbar. Die Dokumentation wurde für C# erstellt, ist aber genauso von C++ 2005 nutzbar.

Stand : 04.09.2007