TODOPIC

Lenguajes de programación para PC => C, C#, C++ => Mensaje iniciado por: LABmouse en 30 de Junio de 2011, 18:31:13

Título: Una serie de preguntas sobre VisualC++
Publicado por: LABmouse en 30 de Junio de 2011, 18:31:13
Hola amigos, quería hacer unas preguntas sobre Visual C++ pues tengo unas detalles que no doy por solucionar con MSDN y todo el internet a disposición.

En VisualBasic tengo lo siguiente:
Código: vb.net
  1. Log.AppendText(vbCrLf + vbCrLf + "Nueva Sesión" + vbCrLf + Now())   'Marca Hora de inicio de nueva sesión


En Visual C++ esto:
Código: C++
  1. Log->AppendText("\r\n\r\n Nueva Sesion\r\n ");

Lo que me hace falta es reemplaza lo que se conoce en VB como Now() pero no logro hacer en VisualC++.

¿Me pueden ayudar por favor con esta primera duda?

Muchas gracias!
Título: Re: Una serie de preguntas sobre VisualC++
Publicado por: Suky en 30 de Junio de 2011, 19:45:20
Lo podes resolver de la siguiente manera:

Código: C++
  1. DateTime^ T1;
  2.                          String^ Text;
  3.  
  4.                          T1=DateTime::Now;
  5.                          Text=String::Format("{0:G}",T1);

Información:

http://msdn.microsoft.com/es-es/library/system.datetime(v=VS.90).aspx

http://msdn.microsoft.com/es-es/library/1ksz8yb7(v=vs.80).aspx


Saludos!
Título: Re: Una serie de preguntas sobre VisualC++
Publicado por: LABmouse en 02 de Julio de 2011, 01:39:36
Hola Suky, quería agradecerte, me ha funcionado perfecto.



Ahora quisiera agregar una pregunta mas:


Intento abrir una URL desde un Botón. Para ello encuentro que la mejor manera de hacerlo es accediendo al ShellExecute (http://msdn.microsoft.com/en-us/library/gg537745(v=VS.85).aspx) de la siguente manera:

Código: C++
  1. ShellExecute(NULL, "open", "http://www.microsoft.com", NULL, NULL, SW_SHOWNORMAL);

el problema radica en que me muestra el siguiente error:
Código: C++
  1. Error   1       error C2664: 'ShellExecuteW' : no se puede convertir el parámetro 2 de 'const char [5]' a 'LPCWSTR'


Encontré en internet esta solución (http://www.daniweb.com/software-development/cpp/threads/292282), pero no me soluciona mi problema en VisualC++2010, la solución habla de cambiar tipo de caracteres UNICODE, pero al hacerlo me saca mas errores.

Pareciera que entiende .com como una extensión de MSDOS incompatible...  :?

Muchas gracias por cualquier ayuda!


Por acá encontré algo pero no tengo idea como usarlo.
Citar
"open" is a (const) char*. _T is there to make it unicode (if I understand correctly..). So _T(url.c_str()) should work.
Título: Re: Una serie de preguntas sobre VisualC++
Publicado por: Suky en 02 de Julio de 2011, 10:24:00
Yo lo hago así:

Código: [Seleccionar]
System::Diagnostics::Process::Start("www.micros-designs.com.ar");
Saludos!
Título: Re: Una serie de preguntas sobre VisualC++
Publicado por: LABmouse en 04 de Julio de 2011, 13:04:50
Amigo sorprendente tu ayuda en todopic, me ha funcionado de una!. Gracias!



ME llevo de pelea desde hace ya 2 días y la verdad lo intento hacer como lo haría en el microcontrolador, pero no me funciona pero nada.

Tengo un TextBox, en el solo permito la escritura de números y los caracteres de la A hasta la F pues quiero que escriban una cadena de números en hexadecimal. Esto funciona perfecto.

Pero ahora quiero tomar ese dato que escribieron en el textbox y llevarlo a una variable tipo char para ser enviado por puerto serial. En VisualBasic lo hacia de la siguiente manera:

Código: vb.net
  1. Dim Value As Byte
  2. Value = CByte("&H" & TbMsgHex.Text)
  3. SerialPort1.Write(New Byte() {CByte(Value)}, 0, 1)

Pero en Visual C++ no se como lograr la conversion, es mas no logro encontrar como conocer la longitud de una cadena de texto en VisualC++.... Ayer busque un libro cerca de casa pero ya no venden libros de Visual C++, ahora todo es visual C#..  :?

Saludos!




Hola, bueno parece que después de preguntar aparecen algunas ayudas en MSDN.

Por acá algo que puede servir como guía:

http://msdn.microsoft.com/es-es/library/system.convert(v=VS.80).aspx

Título: Re: Una serie de preguntas sobre VisualC++
Publicado por: Suky en 04 de Julio de 2011, 13:19:27
Exacto, está Convert::toxxxx()... El problema está enviar esos datos por puerto serial, que hasta donde probé y recuerdo solo acepta caracteres ascii entre 0d a 128d, después da cualquier cosa  :tongue: Hay que estudiar ese tema...


Saludos!
Título: Re: Una serie de preguntas sobre VisualC++
Publicado por: LABmouse en 04 de Julio de 2011, 13:26:07
Hola amigo Suky. para resolver el problema que dices que solo acepta hasta 128, Bruno dio la solución, para ello se sobrecarga el argumento de la siguiente manera:

Código: vb.net
  1. SerialPort1.Write(New Byte() {CByte(Value)}, 0, 1

Solo queda pasar eso de VB a VC++.

ya te comento como me va.

SALUDOS!
Título: Re: Una serie de preguntas sobre VisualC++
Publicado por: Suky en 04 de Julio de 2011, 15:59:02
Solo queda pasar eso de VB a VC++.

Así era:  :mrgreen:

Código: [Seleccionar]
array<unsigned char>^ k= gcnew array<unsigned char>(1);

if(textBox1->Text->CompareTo("")!=0){
k[0]=Convert::ToByte(textBox1->Text);
serialPort1->Write(k,0,1);
}


Saludos!
Título: Re: Una serie de preguntas sobre VisualC++
Publicado por: LABmouse en 04 de Julio de 2011, 17:33:21
Aja!, ni se me ocurría esa manera de lograrlo...

Ahora voy a pasar esto para que reciba cadenas escritas en hexadecimal.

SALUDOS y GRACIAS!



Listo, para indicarle el formato a base del numero escrito se hace de la siguiente manera:

Código: C++
  1. k[0]=Convert::ToByte(TextBox->Text,16);
Título: Re: Una serie de preguntas sobre VisualC++
Publicado por: Suky en 04 de Julio de 2011, 19:09:23
Perdón, me olvide que el string estaba en hexa  :undecided: Está bueno, me obligaste a encontrarle la vuelta, y vamos aprendiendo cosas muy útiles!  :-/

Saludos!
Título: Re: Una serie de preguntas sobre VisualC++
Publicado por: LABmouse en 05 de Julio de 2011, 18:14:34
Hola!,

Bueno se me ha presentado un problema de gran magnitud.

Sucede que hasta el momento todo el proyecto va caminando bien. Se me presenta la necesidad de montar sobre el proyecto unos componentes externos a VisualStudio. Se dejaron instalar bien, y agregar al proyecto bien. PERO!, cuando intento compilar, me dice que ese componente esta para la versión de framework 3.5 y que mi proyecto esta corriendo con la 4.0.  :? Y NO ENCUENTRO DONDE CAMBIARLE LA VERSIÓN DEL FRAMEWORK..

Encuentro para VB y VC# acá:  http://msdn.microsoft.com/en-us/library/bb772098(v=vs.90).aspx

Pero no es igual para Visual C++, ¿Saben como hacerlo?.

Gracias!
Título: Re: Una serie de preguntas sobre VisualC++
Publicado por: Suky en 05 de Julio de 2011, 18:36:42
En el 4º comentario del link que pusiste está, me parece, la solución.


Saludos!
Título: Re: Una serie de preguntas sobre VisualC++
Publicado por: LABmouse en 05 de Julio de 2011, 20:01:57
HOla,

Como bien dices amigo Suky, hay alguien que comento lo siguiente:


Pero no me aparece la primera opción "Right click on project in Solution Explorer and click Unload project"... Suky, a ti si te aparece en tus proyectos?
Título: Re: Una serie de preguntas sobre VisualC++
Publicado por: LABmouse en 05 de Julio de 2011, 20:07:08
Intente crear un proyecto nuevo pero esta vez usando Framework 3.5 y me ha sacado el siguiente error:


Error   1   error MSB8009: .NET Framework 2.0/3.0/3.5 tiene como destino el conjunto de herramientas de la plataforma v90. Asegúrese de que Visual Studio 2008 está instalado en el equipo.   C:\Program Files\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppBuild.targets   292   6


Por favor díganme que es posible bajar el proyecto de Framework 4.0 a framework 3.5 en Visual C++ 2010..  :8}
Título: Re: Una serie de preguntas sobre VisualC++
Publicado por: Suky en 05 de Julio de 2011, 20:44:27
Pero no me aparece la primera opción "Right click on project in Solution Explorer and click Unload project"... Suky, a ti si te aparece en tus proyectos?

Yo trabajo con la versión 2008, simplemente porque cuando baje el 2010 no tenia el intelligent  :mrgreen: En el 2008 puedo hacer los pasos 1 y 2, pero no encuentro <PropertyGroup Label="Globals">  :tongue:


Saludos!
Título: Re: Una serie de preguntas sobre VisualC++
Publicado por: LABmouse en 05 de Julio de 2011, 20:47:21
Hola Suky, yo pensaba que el problema era de mi instalador al no trabajarle el intelligent.. Este 2010 ya me esta sacando canas verdes. Es complicado estar revisando la escritura de los métodos y propiedades pues un error de letra mayúscula o minúscula genera problemas...   :5]
Título: Re: Una serie de preguntas sobre VisualC++
Publicado por: Suky en 05 de Julio de 2011, 20:58:28
Hola Suky, yo pensaba que el problema era de mi instalador al no trabajarle el intelligent.. Este 2010 ya me esta sacando canas verdes. Es complicado estar revisando la escritura de los métodos y propiedades pues un error de letra mayúscula o minúscula genera problemas...   :5]

Eso me paso, y uno no se puede acordar todos los métodos de cada objeto  :shock: Así que cambiazo al 2008  :?
Título: Re: Una serie de preguntas sobre VisualC++
Publicado por: LABmouse en 05 de Julio de 2011, 21:15:14
Amigo Suky,

Por acá unos comentarios sobre ese problema que tengo de no poder usar Framework 3.5 en VC++ 2010.


http://social.msdn.microsoft.com/Forums/en/msbuild/thread/1d452e8d-aa4e-4572-b03f-3d69d5f61cda
Título: Re: Una serie de preguntas sobre VisualC++
Publicado por: LABmouse en 08 de Julio de 2011, 13:24:27
Hola amigos,

Una vez terminado el cambio de visual studio 2010 a 2008 hace apenas unos minutos, me encuentro con un nuevo inconveniente pero es por mi falta de conocimientos en este lenguaje de VisualStudio.


Sucede que necesito declarar una variable tipo string pero que sea global...  :? NO ME LO PERMITE.


¿Saben como se hace esta tarea?
Título: Re: Una serie de preguntas sobre VisualC++
Publicado por: Suky en 08 de Julio de 2011, 13:34:28
Por ejemplo, si llamo al formulario Form1, las variables globales las ubico aquí:

Código: C++
  1. public ref class Form1 : public System::Windows::Forms::Form
  2.         {
  3.                 #pragma region Form1 Variables
  4.                 String ^Mitexto;
  5.                 #pragma endregion
  6.         public:
  7.                 Form1(void)
  8.                 {
  9.                         InitializeComponent();
  10.                         //
  11.                         //TODO: agregar código de constructor aquí
  12.                         //
  13.                 }


Saludos!
Título: Re: Una serie de preguntas sobre VisualC++
Publicado por: LABmouse en 08 de Julio de 2011, 13:43:51
HOla amigo Suky,

yo la estaba declarando en este lugar:

Código: C++
  1. #pragma region Global Variables
  2.  
  3. String ^Mitexto;
  4.  
  5. #pragma endregion

y en ese lugar no me lo recibe, pero donde me dices, funciono perfecto.

Gracias una vez mas!


Título: Re: Una serie de preguntas sobre VisualC++
Publicado por: LABmouse en 09 de Julio de 2011, 21:45:14
Hola!,

 :oops:  Una vez mas por acá con mis dudas de novato...  Realmente no encuentro respuesta a esta también:


Tengo un RichTextBox, y deseo imprimirla tal cual como se ve en el documento. Intente usando un PrintDialog1, simplemente imprime nada, la razon es que no doy de manera correcta cual archivo debe imprimir.

¿Conocen algún link o código que me pueda indicar que camino seguir?
Título: Re: Una serie de preguntas sobre VisualC++
Publicado por: LABmouse en 10 de Julio de 2011, 15:41:21
Inteto esto:


Código: C++
  1. System::Drawing::Printing::PrintDocument^ docToPrint;   // Declara documento a imprimir        
  2.  
  3.                         printDialog1->PrinterSettings->PrintFileName="C:/log.txt";
  4.  
  5.                            System::Windows::Forms::DialogResult result = printDialog1->ShowDialog();
  6.  
  7.                            // If the result is OK then print the document.
  8.                            if ( result == ::System::Windows::Forms::DialogResult::OK ){
  9.                                         docToPrint->Print();
  10.                            }
  11.                         }
  12.                         catch(...){
  13.                                 // Imprime en LOG Error
  14.                                 PRINT_ERROR("Error: Impresión");
  15.                         }


Lo que creo hace falta es asignar a docToPrint cual es el archivo que se debe imprimir... En eso no encuentro mucha ayuda en internet, claro que ultimamente parece que no encuentro muchas cosas.  :?



Bueno por acá encuentro algo mas claro...

http://msdn.microsoft.com/es-es/library/system.drawing.printing.printdocument(v=VS.90).aspx
Título: Re: Una serie de preguntas sobre VisualC++
Publicado por: Suky en 11 de Julio de 2011, 00:19:32
 :? Cero experiencia al respecto, como para comentar... Y no tengo herramientas en donde estoy como para probar algo...  :tongue: Si logras algo, por favor no dudes en postearlo, es interesante el tema...


Saludos!
Título: Re: Una serie de preguntas sobre VisualC++
Publicado por: LABmouse en 11 de Julio de 2011, 11:38:17
Hola amigo Suky,

Ten seguro que de lograrlo estará acá.. Esta dando un poco de problemas esta ultima etapa de la aplicación que quiero lanzar y publicar acá en el foro. Ya quiero terminar rápido jejeje.

Una Pregunta: ¿Como generar un instalador o aplicación final desde Visual c++ 2008 express?, quiero generar los archivos mínimos que se requieren para ser distribuidos sin problemas.
Título: Re: Una serie de preguntas sobre VisualC++
Publicado por: LABmouse en 14 de Julio de 2011, 13:46:53
Hola amigos,

Deje de lado por un rato el botón de imprimir que no me dio resultados, pero ahora me enfrento a un problema que no había previsto desde el inicio.

Sucede que para enviar datos por puerto serial, si el byte a enviar era mayor que 127, simplemente no llegaba nada, pero ya fue solucionado como se mostro en un post anterior por parte de Suky:

Código: C++
  1. array<unsigned char>^ k= gcnew array<unsigned char>(1);
  2.                                  
  3.                                  if(textBox1->Text->CompareTo("")!=0){
  4.                                          k[0]=Convert::ToByte(textBox1->Text);
  5.                                          serialPort1->Write(k,0,1);
  6.                                  }


Pero no había dado con que pasa lo mismo cuando llegan datos por puerto serial...  :?


En el evento por llegada de datos por puerto serial, tengo esto:

Código: C++
  1. private:System::Void serialPort1_DataReceived(System::Object^  sender, System::IO::Ports::SerialDataReceivedEventArgs^  e) {
  2.         String^ DataSerialPort;                        
  3.         DataSerialPort=serialPort1->ReadExisting();                    
  4.         SetText(DataSerialPort);                                                       
  5. }

y la función SetText es esta:

Código: C++
  1. private: void SetText(String^ text){
  2.                 if (this->Consola->InvokeRequired){
  3.                         SetTextCallback^ d = gcnew SetTextCallback(this,&HIDBootLoader::Form1::SetText);
  4.                         this->Invoke(d,gcnew String(text));
  5.                 }
  6.                 else{
  7.                       Textbox1->AppendText(text->Substring(i,1));               // Imprime dato que llego por puerto serial    
  8.                 }
  9. }



Entonces, cuando el dato que llega por serial es mayor a 127, siempre imprime el caracter "?"...  :? 

Tienen idea de como solucionar este problema?
Título: Re: Una serie de preguntas sobre VisualC++
Publicado por: LABmouse en 14 de Julio de 2011, 13:51:59
Depurando paso a paso el proyecto, encuentro que el problema viene desde el evento por puerto COM. Si ye recibo los datos en un string con la siguente instruccion:

Código: C++
  1. DataSerialPort=serialPort1->ReadExisting();                     // Captura datos por puerto serial

Este me entrega el ?, perdiendo el dato real.
Título: Re: Una serie de preguntas sobre VisualC++
Publicado por: LABmouse en 14 de Julio de 2011, 14:05:14
Listo!,

Todo apunta a que serialPort1, usa por defecto los caracteres ascii de 0 ... 127 y cuando llega uno por fuera de esa tabla, simplemente lo marca como no pertenece usando el símbolo ?, entonces, solo debía decirle al puerto serial que usara todos los valores posibles en 8 bits.

Agregue esto:

Código: C++
  1. this->serialPort1->Encoding=::System::Text::Encoding::GetEncoding("iso-8859-1");
      

y funciono!  :P