Search code examples
c++winformsvisual-c++-2010-express

Visual C++ Forms Application won't run on other computers


I'm very new to C++ and I am trying to create a simple Forms Application with Visual C++ Express 2010. I got it to compile with no errors when it was just a header file and a .cpp file and it ran on my computer perfectly fine. When I tried to give my friend the compiled .exe to run, it didn't run. He had the .NET framework 4.5 and the Visual C++ 2010 redistributable package and it still refused to work. He says it just won't start up at all(I don't know if it gives him an error message). All the program had was a button that changed a label. I'm tearing my hair out here because I can't seem to get this to work on any other computer but my own. Please help me understand why this will not run on another computer. It could be an error I made, so the code is down below. As you can see, I've turned it into 3 .cpp files to see if that would work. There's alot of pointless code here, but it still compiles fine.

//Source2.cpp
#pragma once



    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>
    /// Summary for Form1
    /// </summary>
    public ref class Header1 : public System::Windows::Forms::Form
    {
    public:
        Header1(void)
        {
            InitializeComponent();
            //
            //TODO: Add the constructor code here
            //
        }

    protected:
        /// <summary>
        /// Clean up any resources being used.
        /// </summary>
        ~Header1()
        {
            if (components)
            {
                delete components;
            }
        }
    public: System::Windows::Forms::Button^  button1;
            System::Windows::Forms::Label^  label1;

    private:
        /// <summary>
        /// Required designer variable.
        /// </summary>
        System::ComponentModel::Container ^components;

#pragma region Windows Form Designer generated code
        /// <summary>
        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        /// </summary>
        void InitializeComponent(void)
        {
            this->button1 = (gcnew System::Windows::Forms::Button());
            this->label1 = (gcnew System::Windows::Forms::Label());
            this->SuspendLayout();
            // 
            // button1
            // 
            this->button1->Location = System::Drawing::Point(13, 13);
            this->button1->Name = L"button1";
            this->button1->Size = System::Drawing::Size(75, 23);
            this->button1->TabIndex = 0;
            this->button1->Text = L"button1";
            this->button1->UseVisualStyleBackColor = true;
            this->button1->Click += gcnew System::EventHandler(this, &Header1::button1_Click);
            // 
            // label1
            // 
            this->label1->AutoSize = true;
            this->label1->Location = System::Drawing::Point(13, 43);
            this->label1->Name = L"label1";
            this->label1->Size = System::Drawing::Size(46, 17);
            this->label1->TabIndex = 1;
            this->label1->Text = L"label1";
            // 
            // Form1
            // 
            this->AutoScaleDimensions = System::Drawing::SizeF(8, 16);
            this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
            this->ClientSize = System::Drawing::Size(282, 253);
            this->Controls->Add(this->label1);
            this->Controls->Add(this->button1);
            this->Name = L"Form1";
            this->Text = L"Form1";
            this->ResumeLayout(false);
            this->PerformLayout();

        }
#pragma endregion

    private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {
                 this->label1->Text = "works";
             }
    };

^^Note that this was originally a header file called Header1.h

//Source1.cpp
#include "stdafx.h"
#include "Source2.cpp"//used to include Header1.h


public class runpr
{
public:
    runpr()
    {
        create();
    }

    ~runpr();

private:
    void create()
    {
    // Enabling Windows XP visual effects before any controls are created
    Application::EnableVisualStyles();
    Application::SetCompatibleTextRenderingDefault(false); 

    // Create the main window and run it
    Application::Run(gcnew Header1());
//^^all of this was originally in the main function
    }
};

This file is pretty pointless because all of what it does could just be done in the main function or the class could even be in the main project file. I just tried it to see if it would work, but to no avail.

// Testing123.cpp : main project file.

#include "stdafx.h"
#include "Source1.cpp"



[STAThreadAttribute]
int main(array<System::String ^> ^args)
{
    runpr* start = new runpr;
//creates an instance of runpr class
    return 0;
}

Again, any help would be appreciated. Sorry if this was too long and stupid of a question


Solution

  • The Forms Application must be compiled in release mode, since the VC++ Redistributable Package only includes the release dlls ("Debug versions of an application are not redistributable, and debug versions of the Visual C++ library DLLs are not redistributable" Redistributing Visual C++ Files).