Frage zu Mircosoft Visual C++ 2010 Express Edition



  • Alternative 3:

    Er portiert sein C++/CLI auf C#.



  • Na, das läuft aber nicht auf anderen Rechnern, ohne dass man was installiert...



  • Jochen Kalmbach schrieb:

    - In den Projekteinstellungen umstelllen auf statisch linken (siehe mein Webcast)

    Hab ich schon probiert! Geht nicht. wie ja schon2 mal gesagt, ich ver wende ganz viel

    using namespace System;
    

    kommen ganz viele Fehlermeldungen zu Thema System nicht vorhanden!



  • Jochen Kalmbach schrieb:

    Na, das läuft aber nicht auf anderen Rechnern, ohne dass man was installiert...

    Wäre kein Problem! Brauch ja eh eine Installer!



  • Ich poste mal kurz meine Quelltext.

    Hauptdatei:

    // Errinerer.cpp: Hauptprojektdatei.
    
    #include "stdafx.h"
    #include "Form1.h"
    #include <fstream>
    #include <ctime>
    #include <windows.h>
    
    using namespace Errinerer;
    using namespace System;
    using namespace System::IO;
    using namespace System::Collections::Generic;
    
    String^ Wochentag(DateTime Zeit)
    {
        String^ Alles = Zeit.ToString("D");
        return Alles->Substring(0, Alles->IndexOf(","));
    }
    
    [STAThreadAttribute]
    int main(array<System::String ^> ^args)
    {
        // Aktivieren visueller Effekte von Windows XP, bevor Steuerelemente erstellt werden
        Application::EnableVisualStyles();
        Application::SetCompatibleTextRenderingDefault(false); 
    
        try
        {
            StreamReader^ Datei, ^Befehlsdatei;
            StreamWriter^ Zustand;
            array<String^> ^Daten = gcnew array<String^>(3);
            List<String^> ^Zeiten;
            List<String^> ^Texte;
            List<String^> ^Deaktiviert = gcnew List<String^>();
            List<String^> ^Deaktiviert2 = gcnew List<String^>();
            DateTime Zeit;
            String^ Ram;
            int j;
    
            Datei = gcnew StreamReader("Liste.txt");
    
            Zustand = gcnew StreamWriter("Zustand.txt");
            Zustand->Write("Läuft...");
            Zustand->Close();
    
            while(true)
            {
                Zeiten = gcnew List<String^>();
                Texte = gcnew List<String^>();
    
                Zeit = DateTime::Now;
    
                if (Datei->Peek() == -1)
                {
                    Datei->Close();
                    Datei = gcnew StreamReader("Liste.txt");
                    continue;
                }
                Daten[0] = Datei->ReadLine();
                Daten[1] = Datei->ReadLine();
                Daten[2] = Datei->ReadLine();
    
                Zeiten->Add(Daten[1]);
                Texte->Add("Jetzt hast du " + Daten[0] + ".");
    
                Datei->ReadLine();
    
                Ram = Datei->ReadLine();
    
                j = 1;
    
                while(Ram[0] != '-')
                {
                    Zeiten->Add(Ram->Split('|')[0]);
                    Texte->Add(Ram->Split('|')[1]->Replace("&<-", "\n"));
                    Ram = Datei->ReadLine();
                    j++;
                }
    
                Form1^ fenster = gcnew Form1();
    
                for (int i = 0; i < j; i++)
                {
                    if (((DateTime::Now.ToString("t") == Zeiten[i]) && (Wochentag(Zeit) == Daten[2])) &&
                        ((Deaktiviert->IndexOf(Daten[0]) == -1) &&
                        (Deaktiviert2->IndexOf(Daten[0] + "|" + Zeiten[i]) == -1)))
                    {
                        fenster->label1->Text = Daten[0];
                        fenster->label2->Text = "Du hast " + Daten[0] + "!\n" + Daten[2] + "s um " + Daten[1]
                            + " Uhr.\n\n" + Texte[i];
    
                        Application::Run(fenster);
    
                        Deaktiviert2->Add(Daten[0] + "|" + Zeiten[i]);
    
                        if(!(fenster->checkBox1->Checked))
                        {
                            Deaktiviert->Add(Daten[0]);
                        }
                    }
                }
                if(DateTime::Now.ToString("t") == "00:00")
                {
                    Deaktiviert = gcnew List<String^>();
                    Deaktiviert2 = gcnew List<String^>();
                }
                Befehlsdatei = gcnew StreamReader("Pause.txt");
    
                if (Befehlsdatei->Peek() == 69)
                {
                    Zustand = gcnew StreamWriter("Zustand.txt");
                    Zustand->Write("Ende");
                    Zustand->Close();
    
                    return 0;
                }
    
                if (Befehlsdatei->Peek() == 83)
                {
                    Datei->Close();
    
                    while (Befehlsdatei->Peek() == 83)
                    {
                        Befehlsdatei->Close();
    
                        Sleep(5000);
    
                        Befehlsdatei = gcnew StreamReader("Pause.txt");
                    }
    
                    Datei = gcnew StreamReader("Liste.txt");
                }
                Befehlsdatei->Close();
    
                Sleep(950);
            }
        }
        catch(ArgumentOutOfRangeException ^e)
        {
            MessageBox::Show("Es ist ein Fehler aufgetreten!\n\n" + e->ToString(), "Fehler");
        }
        catch(ArgumentNullException ^e)
        {
            MessageBox::Show("Es ist ein Fehler aufgetreten!\n\n" + e->ToString(), "Fehler");
        }
        catch(ArgumentException ^e)
        {
            MessageBox::Show("Es ist ein Fehler aufgetreten!\n\n" + e->ToString(), "Fehler");
        }
        catch(InvalidOperationException ^e)
        {
            MessageBox::Show("Es ist ein Fehler aufgetreten!\n\n" + e->ToString(), "Fehler");
        }
        catch(NullReferenceException ^e)
        {
            MessageBox::Show("Es ist ein Fehler aufgetreten!\n\n" + e->ToString(), "Fehler");
        }
        catch(IndexOutOfRangeException ^e)
        {
            MessageBox::Show("Es ist ein Fehler aufgetreten!\n\n" + e->ToString(), "Fehler");
        }
        catch(FormatException ^e)
        {
            MessageBox::Show("Es ist ein Fehler aufgetreten!\n\n" + e->ToString(), "Fehler");
        }
        catch(SystemException ^e)
        {
            MessageBox::Show("Es ist ein Fehler aufgetreten!\n\n" + e->ToString(), "Fehler");
        }
        catch(Exception ^e)
        {
            MessageBox::Show("Es ist ein Fehler aufgetreten!\n\n" + e->ToString(), "Fehler");
        }
        return 0;
    }
    

    Nicht wundern, die catch-Blöcke dienen nur zur Sicherheit!

    Das Form:

    #pragma once
    
    namespace Errinerer {
    
    	using namespace System;
    	using namespace System::ComponentModel;
    	using namespace System::Collections;
    	using namespace System::Windows::Forms;
    	using namespace System::Data;
    	using namespace System::Drawing;
    
    	/// <summary>
    	/// Zusammenfassung für Form1
    	/// </summary>
    	public ref class Form1 : public System::Windows::Forms::Form
    	{
    	public:
    		Form1(void)
    		{
    			InitializeComponent();
    			//
    			//TODO: Konstruktorcode hier hinzufügen.
    			//
    		}
    
    	protected:
    		/// <summary>
    		/// Verwendete Ressourcen bereinigen.
    		/// </summary>
    		~Form1()
    		{
    			if (components)
    			{
    				delete components;
    			}
    		}
    	public: System::Windows::Forms::Label^  label1;
    	protected: 
    	private: System::Windows::Forms::Button^  button1;
    	public: System::Windows::Forms::CheckBox^  checkBox1;
    	public: System::Windows::Forms::Label^  label2;
    
    	private:
    		/// <summary>
    		/// Erforderliche Designervariable.
    		/// </summary>
    		System::ComponentModel::Container ^components;
    
    #pragma region Windows Form Designer generated code
    		/// <summary>
    		/// Erforderliche Methode für die Designerunterstützung.
    		/// Der Inhalt der Methode darf nicht mit dem Code-Editor geändert werden.
    		/// </summary>
    		void InitializeComponent(void)
    		{
    			System::ComponentModel::ComponentResourceManager^  resources = (gcnew System::ComponentModel::ComponentResourceManager(Form1::typeid));
    			this->label1 = (gcnew System::Windows::Forms::Label());
    			this->button1 = (gcnew System::Windows::Forms::Button());
    			this->checkBox1 = (gcnew System::Windows::Forms::CheckBox());
    			this->label2 = (gcnew System::Windows::Forms::Label());
    			this->SuspendLayout();
    			// 
    			// label1
    			// 
    			resources->ApplyResources(this->label1, L"label1");
    			this->label1->Name = L"label1";
    			// 
    			// button1
    			// 
    			resources->ApplyResources(this->button1, L"button1");
    			this->button1->Name = L"button1";
    			this->button1->UseVisualStyleBackColor = true;
    			this->button1->Click += gcnew EventHandler(this,&Form1::Beenden);
    			// 
    			// checkBox1
    			// 
    			resources->ApplyResources(this->checkBox1, L"checkBox1");
    			this->checkBox1->Checked = true;
    			this->checkBox1->CheckState = System::Windows::Forms::CheckState::Checked;
    			this->checkBox1->Name = L"checkBox1";
    			this->checkBox1->UseVisualStyleBackColor = true;
    			// 
    			// label2
    			// 
    			resources->ApplyResources(this->label2, L"label2");
    			this->label2->Name = L"label2";
    			// 
    			// Form1
    			// 
    			resources->ApplyResources(this, L"$this");
    			this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
    			this->Controls->Add(this->label2);
    			this->Controls->Add(this->checkBox1);
    			this->Controls->Add(this->button1);
    			this->Controls->Add(this->label1);
    			this->MaximizeBox = false;
    			this->MinimizeBox = false;
    			this->Name = L"Form1";
    			this->ResumeLayout(false);
    			this->PerformLayout();
    
    		}
    		void Beenden(System::Object^ Sender, System::EventArgs^ e)
    		{
    			Close();
    		}
    #pragma endregion
    	};
    }
    

    Und noch ne automatisch erzeuge Datei:

    #include "stdafx.h"
    
    using namespace System;
    using namespace System::Reflection;
    using namespace System::Runtime::CompilerServices;
    using namespace System::Runtime::InteropServices;
    using namespace System::Security::Permissions;
    
    //
    // Allgemeine Informationen über eine Assembly werden über die folgenden
    // Attribute gesteuert. Ändern Sie diese Attributwerte, um die Informationen zu ändern,
    // die mit einer Assembly verknüpft sind.
    //
    [assembly:AssemblyTitleAttribute("Errinerer")];
    [assembly:AssemblyDescriptionAttribute("")];
    [assembly:AssemblyConfigurationAttribute("")];
    [assembly:AssemblyCompanyAttribute("")];
    [assembly:AssemblyProductAttribute("Errinerer")];
    [assembly:AssemblyCopyrightAttribute("Copyright (c)  2010")];
    [assembly:AssemblyTrademarkAttribute("")];
    [assembly:AssemblyCultureAttribute("")];
    
    //
    // Versionsinformationen für eine Assembly bestehen aus den folgenden vier Werten:
    //
    //      Hauptversion
    //      Nebenversion
    //      Buildnummer
    //      Revision
    //
    // Sie können alle Werte angeben oder für die Revisions- und Buildnummer den Standard
    // übernehmen, indem Sie "*" eingeben:
    
    [assembly:AssemblyVersionAttribute("1.0.*")];
    
    [assembly:ComVisible(false)];
    
    [assembly:CLSCompliantAttribute(true)];
    
    [assembly:SecurityPermission(SecurityAction::RequestMinimum, UnmanagedCode = true)];
    

    Das War's.



  • Es sind schon alle Lösungswege aufgezeigt.
    CLR Projekt ohne CLR geht nicht. Du sagst du willst dein Programm mit einem Installer ausliefern, dann überlass ihm das Prüfen und Installieren von
    - Microsoft Visual C++ Redistributable und
    - Microsoft .Net Redistributable
    jeweils in der Entwicklungsversion, die du als Entwickler verwendest.



  • Wo finde ich die Datein?




Anmelden zum Antworten