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?
-