2013-08-25 173 views
0

我对C++很陌生,我试图用Visual C++ Express 2010创建一个简单的窗体应用程序。当它只是一个头文件和一个.cpp文件,它在我的电脑上运行得非常好。当我试图让我的朋友编译.exe运行时,它没有运行。他有.NET框架4.5和Visual C++ 2010可再发行组件包,但仍然拒绝工作。他说它根本不会启动(我不知道它是否给了他一个错误信息)。所有的程序都是一个改变标签的按钮。我在这里把我的头发扯出来,因为我似乎无法让它在任何其他计算机上工作,只能是我自己的。请帮我理解为什么这不会在另一台计算机上运行。这可能是我犯的一个错误,所以代码在下面。正如你所看到的,我已经将它转换成3个.cpp文件来查看这是否可行。这里有很多无意义的代码,但它仍然编译得很好。Visual C++窗体应用程序不能在其他计算机上运行

//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"; 
      } 
    }; 

^^请注意,这是最初叫那么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 
    } 
}; 

此文件中的头文件是很没有意义的,因为所有的东西它可能只是在主函数或类来完成甚至可以在主项目文件中。我只是试图看看它是否会起作用,但无济于事。

// 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; 
} 

再次,任何帮助,将不胜感激。对不起,如果这太长和愚蠢的一个问题

+0

你在发布模式下编译?目标机器上是否安装了VC++ 2010 SP1?你可以将可执行文件添加到文章中吗? – Tobias

+0

@Tobias感谢您的回复。问题是我没有在发布模式下编译。简直不敢相信它是如此简单。我应该可以学习更多关于Visual C++的知识...... – foolsworld

+0

太棒了。我在答案中添加了解决方案。 – Tobias

回答

0

表格应用程序必须在发布模式编译,因为VC++可再发行组件包只包括发布dll(“应用程序的调试版本不可再发行,调试版本的Visual C++库DLL不可再分发“Redistributing Visual C++ Files)。

相关问题