Re: Fruit basket program in C++/CLI

  • From: Jamal Mazrui <empower@xxxxxxxxx>
  • To: programmingblind@xxxxxxxxxxxxx
  • Date: Mon, 19 Nov 2007 12:41:50 -0500 (EST)

FYI -- I was unable to create a stand-alone fruit basket executable with
the /clr or /clr:pure parameters.  Dependencies to other files remained,
which had to be available on the existing search paths, specified in a
seperate manifest file, or included in the same directory as the
executable.  The /clr:safe parameter, however, did create a stand-alone,
.NET-based executable.

Jamal
On Mon, 19 Nov 2007, Will Pearson wrote:

> Date: Mon, 19 Nov 2007 16:49:58 -0000
> From: Will Pearson <will@xxxxxxxxxxxxx>
> Reply-To: programmingblind@xxxxxxxxxxxxx
> To: programmingblind@xxxxxxxxxxxxx
> Subject: Re: Fruit basket program in C++/CLI
>
> Hi,
>
> cl.exe has thre modes for compiling C++/CLI:
> - /clr
> This is the C++ interop mode.  It enables native and managed code to coexist
> together.  Importantly, it is the only clr option that allows you to still
> use pointers in your code.  This means you can use callbacks and other
> places where pointers are typically found in native API's.  As both native
> and managed code can coexist together you can create a project that uses
> both the Windows API and the .Net Framework.  These are known as mixed
> assemblies in .Net terminology.
>
> - /clr:pure
> Will compile all the code to IL and produce a pure .Net assembly.  This
> means that you can't use native API's from within your code unless you use
> the interop methods provided by the .Net Framework, such as P/Invoke or COM
> interop.
>
> - /clr:safe
> Produces a .Net assembly that is verifiable.
>
> Will
> ----- Original Message -----
> From: "jaffar" <jaffar@xxxxxxxxxxxxx>
> To: <programmingblind@xxxxxxxxxxxxx>
> Sent: Monday, November 19, 2007 4:29 PM
> Subject: Re: Fruit basket program in C++/CLI
>
>
> Hi Marlon.  At least for the other editions of Visual Studio apart from the
> express which i cannot be sure off, you can actually make changes to your
> compiler options so that it can compile either native c++ code or
> microsoft's cli version of c++ or both.  For example, You can turn off the
> _T identifier needed to compile character sequences in your code and revert
> to the standard CHAR used by native C++.  Cheers!
> ----- Original Message -----
> From: "Marlon Brandão de Sousa" <splyt.lists@xxxxxxxxx>
> To: <programmingblind@xxxxxxxxxxxxx>
> Sent: Monday, November 19, 2007 10:38 PM
> Subject: Re: Fruit basket program in C++/CLI
>
>
> hmm Jamal, correct me if I am wrong, but my understanding is that one
> can't compile binary, native win32 executable if they use the cli
> part.
> Sure visual C can generate binaries for win32, but if you use the
> extensions, at least based on what I have understood, the .net
> dependencies will be kept ...
> In other words I can use visual C to develope binaries in raw c++ but
> not in the cli version, using visual c.
> Marlon
>
> 2007/11/19, Jamal Mazrui <empower@xxxxxxxxx>:
> > Yes, my undrstanding is that C++/CLI is essentially for C++ developers
> > who want to take advantage of the .NET Framework with the language and
> > associated features to which they have become accustomed.  Microsoft
> > submitted the language for international standardization, and this has
> > occurred, so theoretically other software publishers and platforms could
> > develop compilers for C++/CLI besides Microsoft Visual C++.  It is
> > unlikely that will happen practically speaking, however, because of the
> > inherent relation to .NET 2.0.
> >
> > It is noteworthy that Microsoft's compiler can be used to create native
> > Win32 executables in standard C++ without any .NET dependencies.  In
> > other words, the CLI aspect adds language extensions, but not
> > requirements for a traditional C++ developer.
> >
> > Jamal
> > On Mon, 19 Nov 2007, Marlon
> > Brandão de Sousa wrote:
> >
> > > Date: Mon, 19 Nov 2007 09:32:13 -0200
> > > From: Marlon Brandão de Sousa <splyt.lists@xxxxxxxxx>
> > > Reply-To: programmingblind@xxxxxxxxxxxxx
> > > To: programmingblind@xxxxxxxxxxxxx
> > > Subject: Re: Fruit basket program in C++/CLI
> > >
> > > Only to clarify, Lamar, this isn't c or c++. This is c Cli, which
> > > means it is a c++ modified language which allows the use of the .net
> > > stuff. If you want to develope for anything portable or non windows
> > > keep away from this for now and go learn the c++ language.
> > > This version of c++, the cli one, introduces some sintactical
> > > modifications (e.e the ^ symbol which seen to be a kind of pointer),
> > > and some other new things, but it won't compile out of microsoft
> > > compilers and it won't run out of windows ... well it won't run even
> > > on windows , if the .net is not installed on it.
> > >
> > > 2007/11/19, jaffar <jaffar@xxxxxxxxxxxxx>:
> > > > Hi Lamar.  No.  You'll need at least the .net 2.0 runtime to be able
> > > > to
> > run
> > > > it.  Cheers!
> > > > ----- Original Message -----
> > > > From: "Lamar Upshaw" <lupshaw@xxxxxxxxxxxxxx>
> > > > To: <programmingblind@xxxxxxxxxxxxx>
> > > > Sent: Monday, November 19, 2007 4:30 PM
> > > > Subject: Re: Fruit basket program in C++/CLI
> > > >
> > > >
> > > > > Just to clarify, I should be able to run this using minGW, correct?
> > > > >
> > > > > With All Respect,
> > > > > Upshaw, Lamar T
> > > > > ----- Original Message -----
> > > > > From: "Jamal Mazrui" <empower@xxxxxxxxx>
> > > > > To: <programmingblind@xxxxxxxxxxxxx>
> > > > > Sent: Sunday, November 18, 2007 8:14 PM
> > > > > Subject: Fruit basket program in C++/CLI
> > > > >
> > > > >
> > > > >> From the archive at
> > > > >> http://www.EmpowermentZone.com/cli_fruit.zip
> > > > >>
> > > > >> This fruit basket program is written in C++/CLI:  the C++ language
> > with
> > > > >> extensions to support the Common Language Infrastructure of the
> > > > >> .NET
> > > > >> Framework.  C++/CLI can create native Win32 executables or
> > > > >> libraries,
> > > > >> .NET-based ones, or a combination of both.  Related development
> > resources
> > > > >> that are freely available from Microsoft.com include the following:
> > the
> > > > >> .NET Framework 2.0 SDK, the Microsoft Platform SDK for Windows
> > > > >> Server
> > > > >> 2003, and Visual C++ 2005 Express Edition.
> > > > >>
> > > > >> The archive includes a batch file, compile.bat, which invokes the
> > > > >> command-line compiler to create an executable, cli_fruit.exe, which
> > is
> > > > >> about 5K in size.  The batch file initially sets environmental
> > variables
> > > > >> that may need to be tweaked on another computer so that appropriate
> > > > >> directories are referenced.
> > > > >>
> > > > >> Besides the resulting executable, No other files are needed to run
> > the
> > > > >> program -- as long as .NET 2.0 is installed.   The included Source
> > code
> > > > >> is
> > > > >> also pasted below.
> > > > >>
> > > > >> Jamal
> > > > >>
> > > > >> /*;
> > > > >> content of cli_fruit.cpp;
> > > > >> Fruit Basket program in C++/CLI
> > > > >> //public domain by Jamal Mazrui
> > > > >> */;
> > > > >>
> > > > >> // Reference libraries
> > > > >> #using <System.dll>
> > > > >> #using <System.Windows.Forms.dll>
> > > > >>
> > > > >> // Import namespaces
> > > > >> using namespace System;
> > > > >> using namespace System::Windows::Forms;
> > > > >>
> > > > >> // Define class
> > > > >> ref class FruitBasket : public Form {
> > > > >> public :
> > > > >> //Define constructor
> > > > >> FruitBasket() {
> > > > >> // Initialize controls and set properties
> > > > >> tlp = gcnew TableLayoutPanel();
> > > > >> tlp->ColumnCount = 3;
> > > > >> tlp->RowCount = 2;
> > > > >>
> > > > >> lblFruit = gcnew Label();
> > > > >> lblFruit->Text = "&Fruit:";
> > > > >> tlp->Controls->Add(lblFruit);
> > > > >>
> > > > >> txtFruit = gcnew TextBox();
> > > > >> tlp->Controls->Add(txtFruit);
> > > > >>
> > > > >> btnAdd = gcnew Button();
> > > > >> btnAdd->Text = "&Add";
> > > > >> btnAdd->Click += gcnew EventHandler(this,
> > &FruitBasket::Button_Click);
> > > > >> tlp->Controls->Add(btnAdd);
> > > > >>
> > > > >> lblBasket = gcnew Label();
> > > > >> lblBasket->Text = "&Basket:";
> > > > >> tlp->Controls->Add(lblBasket);
> > > > >>
> > > > >> lstBasket = gcnew ListBox();
> > > > >> tlp->Controls->Add(lstBasket);
> > > > >>
> > > > >> btnDelete = gcnew Button();
> > > > >> btnDelete->Text = "&Delete";
> > > > >> btnDelete->Click += gcnew EventHandler(this,
> > &FruitBasket::Button_Click);
> > > > >> tlp->Controls->Add(btnDelete);
> > > > >>
> > > > >> Text = "Fruit Basket";
> > > > >> AcceptButton = btnAdd;
> > > > >> StartPosition = FormStartPosition::CenterScreen;
> > > > >> AutoSize = true;
> > > > >> AutoSizeMode = System::Windows::Forms::AutoSizeMode::GrowAndShrink;
> > > > >> Controls->Add(tlp);
> > > > >> } // FruitBasket constructor
> > > > >>
> > > > >> // Define destructor
> > > > >> virtual ~FruitBasket() {
> > > > >> } // FruitBasket destructor
> > > > >>
> > > > >> // Define event handler;
> > > > >> void Button_Click(Object^ sender, EventArgs^ e) {
> > > > >> if (sender == btnAdd) {
> > > > >> String^ sFruit = txtFruit->Text->Trim();
> > > > >> if (sFruit->Length == 0) {
> > > > >> MessageBox::Show("No fruit to add!", "Alert");
> > > > >> return;
> > > > >> }
> > > > >>
> > > > >> lstBasket->Items->Add(sFruit);
> > > > >> txtFruit->Clear();
> > > > >> lstBasket->SelectedIndex = lstBasket->Items->Count - 1;
> > > > >> }
> > > > >> else if (sender == btnDelete) {
> > > > >> int iFruit = lstBasket->SelectedIndex;
> > > > >> if (iFruit == -1) {
> > > > >> MessageBox::Show("No fruit to delete->", "Alert");
> > > > >> return;
> > > > >> }
> > > > >>
> > > > >> lstBasket->Items->RemoveAt(iFruit);
> > > > >> if (iFruit == lstBasket->Items->Count) iFruit--;
> > > > >> lstBasket->SelectedIndex = iFruit;
> > > > >> }
> > > > >> } // Button_Click event handler
> > > > >>
> > > > >> // Declare controls;
> > > > >> TableLayoutPanel^ tlp;
> > > > >> Label^ lblFruit;
> > > > >> TextBox^ txtFruit;
> > > > >> Button^ btnAdd;
> > > > >> Label^ lblBasket;
> > > > >> ListBox^ lstBasket;
> > > > >> Button^ btnDelete;
> > > > >> }; // FruitBasket class
> > > > >>
> > > > >> // Define entry point of program
> > > > >> int main() {
> > > > >> Application::Run(gcnew FruitBasket());
> > > > >> return 0;
> > > > >> } // main method
> > > > >>
> > > > >> // End of cli_fruit.cpp
> > > > >>
> > > > >> __________
> > > > >> View the list's information and change your settings at
> > > > >> //www.freelists.org/list/programmingblind
> > > > >>
> > > > >
> > > > > __________
> > > > > View the list's information and change your settings at
> > > > > //www.freelists.org/list/programmingblind
> > > > >
> > > >
> > > > __________
> > > > View the list's information and change your settings at
> > > > //www.freelists.org/list/programmingblind
> > > >
> > > >
> > >
> > >
> > > --
> > > When you say "I wrote a program that crashed Windows," people just
> > > stare at you blankly and say "Hey, I got those with the system, for
> > > free."
> > > Linus Torvalds
> > > __________
> > > View the list's information and change your settings at
> > > //www.freelists.org/list/programmingblind
> > >
> > __________
> > View the list's information and change your settings at
> > //www.freelists.org/list/programmingblind
> >
> >
>
>
> --
> When you say "I wrote a program that crashed Windows," people just
> stare at you blankly and say "Hey, I got those with the system, for
> free."
> Linus Torvalds
> __________
> View the list's information and change your settings at
> //www.freelists.org/list/programmingblind
>
> __________
> View the list's information and change your settings at
> //www.freelists.org/list/programmingblind
> __________
> View the list's information and change your settings at
> //www.freelists.org/list/programmingblind
>
__________
View the list's information and change your settings at
//www.freelists.org/list/programmingblind

Other related posts: