PDA

View Full Version : [Managed c++]


okay
09-02-2007, 07:48
tool vs NET 2005.

E' cambiata la sintassi del managed c++ dal vs NET 2003 al vs NET 2005.
Sono migrato al vs NET 2005 e i vecchi progetti naturalmente non vanno sul 2005.
Insomma la m$ non sà proprio come fare per ingarbugliare la vita ai programmatori...!!
Cmq...

A me serve sapere come l'HINSTANCE dunque:

nella vecchia sintassi era semplice perchè hinstance già di default:
ecco il code:

#include "stdafx.h"
#include "Form1.h"
#include <windows.h>

using namespace Okay;

int APIENTRY _tWinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow)
{
System::Threading::Thread::CurrentThread->ApartmentState = System::Threading::ApartmentState::STA;
// Application::Run(new Form1());
Application::Run(new Form1(hInstance));//prendo hinstance ok

return 0;
}


ora i nuovi progetti e la sintassi cambiata ecco il code:

// okay.cpp : main project file.

#include "stdafx.h"
#include "Form1.h"

using namespace okay;

[STAThreadAttribute]
int main(array<System::String ^> ^args)
{
// 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 Form1());
return 0;
}


A me serve sapere come prendere "hInstance" e passarlo da quì:
Application::Run(gcnew Form1(hInstance));

qualcuno sà come fare?? ho visto nei metodi ma nulla in + come documentazione alla nuova sintassi c'è veramente poco su msdn ho trovato qualcosa ma è ancora tutto in lavorazione per la nuova sintassi del managed c++.

71104
09-02-2007, 15:10
l'HINSTANCE passato alla WinMain è (era) un anacronismo, è un valore inutile: corriponde sempre al base address dell'eseguibile (0x00400000 nel 99% dei casi). so che il windowing system se ne frega, quindi hai due strade:
1) gli passi NULL e vedi se funziona lo stesso, cosa probabile
2) gli passi il valore ritornato da GetModuleHandle(NULL) castato ad HINSTANCE

okay
09-02-2007, 17:05
l'HINSTANCE passato alla WinMain è (era) un anacronismo, è un valore inutile: corriponde sempre al base address dell'eseguibile (0x00400000 nel 99% dei casi). so che il windowing system se ne frega, quindi hai due strade:
1) gli passi NULL e vedi se funziona lo stesso, cosa probabile
2) gli passi il valore ritornato da GetModuleHandle(NULL) castato ad HINSTANCE


ciao

ho risolto così:
// Init oki.lib
Inizializzazione(NULL, (HINSTANCE)this->Handle.ToPointer());

mancano, non dico completamente...mhà!, le sintassi e quindi mi sembro un pazzo alle volte digito caratteri a caso cercando di trovare il giusto modo.
Stò migrando l'editor in managed c++ dove posso usare il property grid un controllo che mi piace proprio.

viso che ci sono continuo quì:

Per le messagebox stesso problema non trovo nulla ne su google ne l'msdn online.

questo è il code che credo sia giusto in quanto compila:

if(MessageBox::Show("Quit?", "Session", MessageBoxButtons::YesNo, MessageBoxIcon::Question)== DialogResult::get())
Close();


ma non chiude mai l'applicazione.
Pensavo di mettere:
DialogResult::OK ma non lo digerisce!
dopo
DialogResult:: ci sono 2 metodi get() che funziona come sopra e set() che mi dà invece errore.

ho fatto pure int result=Messagebox... e poi
if(result) ma mi dà naturalmente errore.

ne sai nulla?

ciao

okay
09-02-2007, 18:51
risolto così:


if(MessageBox::Show("You are sure to quit?", "Session", MessageBoxButtons::YesNo, MessageBoxIcon::Question)== Windows::Forms::DialogResult::Yes )
Close();


per chi è interesato al manged c++ questo è un ottimo sito:
http://www.functionx.com/vcnet/index.htm

Solo che la sintassi è cambiata...e ho detto tutto!