none
Pasar de VC# a VC++ algúnos códigos equivalentes. RRS feed

  • Pregunta

  • Hola:

     

    Estoy intentando pasar este pequeño código del Visual C# a Visual C++, En el Form1 he puesto un botón, internamente lo he llamado button_t. Al pulsar dos veces click sobre él, añadí el código correspondiente:

                byte[] mBuffer = new byte[1]; 
                mBuffer[0] = 0x74; //ASCII letra "t". 
                serialPort1.Write(mBuffer, 0, mBuffer.Length); 

    Este código que acaba de poner arriba en C# funciona muy bien, pero en Visual C++ seguro que es diferente. ¿Cuál es el código equivalente?


    1using System; 
    2using System.Collections.Generic; 
    3using System.ComponentModel; 
    4using System.Data; 
    5using System.Drawing; 
    6using System.Linq; 
    7using System.Text; 
    8using System.Windows.Forms; 
    9using System.IO.Ports; 
    10 
    11namespace PicRS232 
    12
    13    public partial class Form1_Principal : Form 
    14    { 
    15        public Form1_Principal() 
    16        { 
    17            InitializeComponent(); 
    18            // Abrir puerto mientra se ejecute la aplicación 
    19            if (!serialPort1.IsOpen) 
    20            { 
    21                try 
    22                { 
    23                    serialPort1.Open(); 
    24                } 
    25                catch (System.Exception ex) 
    26                { 
    27                    MessageBox.Show(ex.ToString()); 
    28                } 
    29            } 
    30        } 
    31 
    32        private void button_t_Click(object sender, EventArgs e) 
    33        { 
    34            byte[] mBuffer = new byte[1]; 
    35            mBuffer[0] = 0x74; //ASCII letra "t". 
    36            serialPort1.Write(mBuffer, 0, mBuffer.Length); 
    37        } 
    38 
    39    } 
    40
    41 

    Aquí abajo tengo el código en Visual C++, por supuesto que tanto en C# y C++ he puesto el componente llamado serialPort1.

     

    1#pragma once 
    2 
    3 
    4namespace PicRS232VCPP_Prueba01 { 
    5 
    6    using namespace System; 
    7    using namespace System::ComponentModel; 
    8    using namespace System::Collections; 
    9    using namespace System::Windows::Forms; 
    10    using namespace System::Data; 
    11    using namespace System::Drawing; 
    12    using namespace System::IO::Ports; 
    13 
    14    /// <summary> 
    15    /// Resumen de Form1 
    16    /// 
    17    /// ADVERTENCIA: si cambia el nombre de esta clase, deberá cambiar la 
    18    ///          propiedad 'Nombre de archivos de recursos' de la herramienta de compilación de recursos administrados 
    19    ///          asociada con todos los archivos .resx de los que depende esta clase. De lo contrario, 
    20    ///          los diseñadores no podrán interactuar correctamente con los 
    21    ///          recursos adaptados asociados con este formulario. 
    22    /// </summary> 
    23    public ref class Form1 : public System::Windows::Forms::Form 
    24    { 
    25    public
    26        Form1(void
    27        { 
    28            InitializeComponent(); 
    29            // 
    30            //TODO: agregar código de constructor aquí 
    31            // 
    32            // Abrir puerto mientrase ejecute la aplicación 
    33            if(!serialPort1.IsOpen) 
    34                { 
    35                try 
    36                { 
    37                serialPort1.Open(); 
    38                } 
    39                catch (System.Exceptionex) 
    40                { 
    41                    MessageBox.Show(ex.ToString()); 
    42                } 
    43            } 
    44        } 
    45 
    46    protected
    47        /// <summary> 
    48        /// Limpiar los recursos que se estén utilizando. 
    49        /// </summary> 
    50        ~Form1() 
    51        { 
    52            if (components) 
    53            { 
    54                delete components; 
    55            } 
    56        } 
    57    private: System::Windows::Forms::Button^  button_t; 
    58    private: System::IO::Ports::SerialPort^  serialPort1; 
    59    private: System::ComponentModel::IContainer^  components; 
    60 
    61    protected:  
    62 
    63    private
    64        /// <summary> 
    65        /// Variable del diseñador requerida. 
    66        /// </summary> 
    67
    68
    69#pragma region Windows Form Designer generated code 
    70        /// <summary> 
    71        /// Método necesario para admitir el Diseñador. No se puede modificar 
    72        /// el contenido del método con el editor de código. 
    73        /// </summary> 
    74        void InitializeComponent(void
    75        { 
    76            this->components = (gcnew System::ComponentModel::Container()); 
    77            this->button_t = (gcnew System::Windows::Forms::Button()); 
    78            this->serialPort1 = (gcnew System::IO::Ports::SerialPort(this->components)); 
    79            this->SuspendLayout(); 
    80            //  
    81            // button_t 
    82            //  
    83            this->button_t->Location = System::Drawing::Point(109, 38); 
    84            this->button_t->Name = L"button_t"
    85            this->button_t->Size = System::Drawing::Size(75, 23); 
    86            this->button_t->TabIndex = 0; 
    87            this->button_t->Text = L"t"
    88            this->button_t->UseVisualStyleBackColor = true
    89            this->button_t->Click += gcnew System::EventHandler(this, &Form1::button_t_Click); 
    90            //  
    91            // serialPort1 
    92            //  
    93            this->serialPort1->StopBits = System::IO::Ports::StopBits::Two; 
    94            //  
    95            // Form1 
    96            //  
    97            this->AutoScaleDimensions = System::Drawing::SizeF(6, 13); 
    98            this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font; 
    99            this->ClientSize = System::Drawing::Size(292, 266); 
    100            this->Controls->Add(this->button_t); 
    101            this->Name = L"Form1"
    102            this->StartPosition = System::Windows::Forms::FormStartPosition::CenterScreen; 
    103            this->Text = L"PicRS232VCPP"
    104            this->ResumeLayout(false); 
    105 
    106        } 
    107#pragma endregion 
    108    private: System::Void button_t_Click(System::Object^  sender, System::EventArgs^  e) { 
    109                 byte[] mBuffer = new byte[1]; 
    110                 mBuffer[0] = 0x74; // ASCII letra "t". 
    111                 serialPort1.Write(mBuffer, 0, mBuffer.Length); 
    112             } 
    113}; 
    114
    115 

     Es más complicado de lo que creía, ya que instalé el Visual C++, deja ver si puedo realizar el código.

    Un cordial saludo.


    La verdad no mancha los labios de quien la dice, sino la conciencia de quien la oculta.
    sábado, 7 de febrero de 2009 13:04

Respuestas

  •  
    33             if(!serialPort1.IsOpen) 
    34                 { 
    35                 try 
    36                 { 
    37                 serialPort1.Open(); 
    38                 } 
    39                 catch (System.Exceptionex
    40                 { 
    41                     MessageBox.Show(ex.ToString()); 
    42                 } 
    43             }

    Si te fijas dejaste pegado lo que esta en negrita.... debiera ser( System.Exception ex)
    Juan Carlos Ruiz - http://juank.black-byte.com
    sábado, 7 de febrero de 2009 23:24
    Moderador
  •                      MessageBox::Show(ex->ToString()); 
    Juan Carlos Ruiz - http://juank.black-byte.com
    lunes, 9 de febrero de 2009 14:10
    Moderador

Todas las respuestas

  •  
    33             if(!serialPort1.IsOpen) 
    34                 { 
    35                 try 
    36                 { 
    37                 serialPort1.Open(); 
    38                 } 
    39                 catch (System.Exceptionex
    40                 { 
    41                     MessageBox.Show(ex.ToString()); 
    42                 } 
    43             }

    Si te fijas dejaste pegado lo que esta en negrita.... debiera ser( System.Exception ex)
    Juan Carlos Ruiz - http://juank.black-byte.com
    sábado, 7 de febrero de 2009 23:24
    Moderador
  • Hola:

    Vi ese error y lo corregí y gracias.

    Ahora me tocó algo más que no se lo que es.

    1>------ Operación Generar iniciada: proyecto: PicRS232VCPP_Prueba01, configuración: Debug Win32 ------ 
    1>Compilando... 
    1>PicRS232VCPP_Prueba01.cpp 
    1>c:\documents and settings\hunter\mis documentos\visual studio 2008\projects\picrs232vcpp_prueba01\picrs232vcpp_prueba01\Form1.h(33) : error C2228: el operando izquierdo de '.IsOpen' debe tener class/struct/union 
    1>        el tipo es 'System::IO::Ports::SerialPort ^' 
    1>        ¿deseaba utilizar '->' en su lugar? 
    1>c:\documents and settings\hunter\mis documentos\visual studio 2008\projects\picrs232vcpp_prueba01\picrs232vcpp_prueba01\Form1.h(37) : error C2228: el operando izquierdo de '.Open' debe tener class/struct/union 
    1>        el tipo es 'System::IO::Ports::SerialPort ^' 
    1>        ¿deseaba utilizar '->' en su lugar? 
    1>c:\documents and settings\hunter\mis documentos\visual studio 2008\projects\picrs232vcpp_prueba01\picrs232vcpp_prueba01\Form1.h(39) : error C2061: error de sintaxis : identificador 'System' 
    1>c:\documents and settings\hunter\mis documentos\visual studio 2008\projects\picrs232vcpp_prueba01\picrs232vcpp_prueba01\Form1.h(39) : error C2310: los controladores de tipo catch deben especificar un tipo 
    1>c:\documents and settings\hunter\mis documentos\visual studio 2008\projects\picrs232vcpp_prueba01\picrs232vcpp_prueba01\Form1.h(41) : error C2143: error de sintaxis : falta ';' delante de '.' 
    1>c:\documents and settings\hunter\mis documentos\visual studio 2008\projects\picrs232vcpp_prueba01\picrs232vcpp_prueba01\Form1.h(41) : error C2143: error de sintaxis : falta ';' delante de '.' 
    1>c:\documents and settings\hunter\mis documentos\visual studio 2008\projects\picrs232vcpp_prueba01\picrs232vcpp_prueba01\Form1.h(43) : error C2317: El bloque 'try' que empieza en la línea '36' no tiene controladores de tipo catch 
    1>El registro de compilación se guardó en el "file://c:\Documents and Settings\Hunter\Mis documentos\Visual Studio 2008\Projects\PicRS232VCPP_Prueba01\PicRS232VCPP_Prueba01\Debug\BuildLog.htm" 
    1>PicRS232VCPP_Prueba01 - 7 errores, 0 advertencias 
    ========== Generar: 0 correctos, 1 incorrectos, 0 actualizados, 0 omitidos ========== 
     

    Esos errores siempre está en esta parte de aquí abajo.
    if(!serialPort1.IsOpen) 
                    { 
                    try 
                    { 
                    serialPort1.Open(); 
                    } 
                    catch (System.Exception ex) 
                    { 
                        MessageBox.Show(ex.ToString()); 
                    } 
                } 

    Me estoy fijando en el manual de Visual C# de la página 132 en adelante de lo que quiero hacer.
    http://www.abcdatos.com/tutoriales/tutorial/z9521.html

    EDITO 2:

    ME dio por hacer el código así sustituyendo los . por los -> que me di cuent tarde. Aún así hay errores.
    if(!serialPort1->IsOpen) 
                    { 
                    try 
                    { 
                    serialPort1->Open(); 
                    } 
                    catch (System->Exception ex) 
                    { 
                        MessageBox->Show(ex->ToString()); 
                    } 
                } 

    Errores.
    1>------ Operación Generar iniciada: proyecto: PicRS232VCPP_Prueba01, configuración: Debug Win32 ------ 
    1>Compilando... 
    1>PicRS232VCPP_Prueba01.cpp 
    1>c:\documents and settings\hunter\mis documentos\visual studio 2008\projects\picrs232vcpp_prueba01\picrs232vcpp_prueba01\Form1.h(39) : error C2061: error de sintaxis : identificador 'System' 
    1>c:\documents and settings\hunter\mis documentos\visual studio 2008\projects\picrs232vcpp_prueba01\picrs232vcpp_prueba01\Form1.h(39) : error C2310: los controladores de tipo catch deben especificar un tipo 
    1>c:\documents and settings\hunter\mis documentos\visual studio 2008\projects\picrs232vcpp_prueba01\picrs232vcpp_prueba01\Form1.h(41) : error C2143: error de sintaxis : falta ';' delante de '->
    1>c:\documents and settings\hunter\mis documentos\visual studio 2008\projects\picrs232vcpp_prueba01\picrs232vcpp_prueba01\Form1.h(41) : error C2143: error de sintaxis : falta ';' delante de '->
    1>c:\documents and settings\hunter\mis documentos\visual studio 2008\projects\picrs232vcpp_prueba01\picrs232vcpp_prueba01\Form1.h(43) : error C2317: El bloque 'try' que empieza en la línea '36' no tiene controladores de tipo catch 
    1>El registro de compilación se guardó en el "file://c:\Documents and Settings\Hunter\Mis documentos\Visual Studio 2008\Projects\PicRS232VCPP_Prueba01\PicRS232VCPP_Prueba01\Debug\BuildLog.htm" 
    1>PicRS232VCPP_Prueba01 - 5 errores, 0 advertencias 
    ========== Generar: 0 correctos, 1 incorrectos, 0 actualizados, 0 omitidos ========== 

    EDITO 3:

    Ahora tengo 2 errores y no se como solucionarlo.
    if(!serialPort1->IsOpen) 
                    { 
                    try 
                    { 
                    serialPort1->Open(); 
                    } 
                    catch (System::Exception ex) 
                    { 
                        MessageBox::Show(ex.ToString()); 
                    } 
                } 

    1>------ Operación Generar iniciada: proyecto: PicRS232VCPP_Prueba01, configuración: Debug Win32 ------ 
    1>Compilando... 
    1>PicRS232VCPP_Prueba01.cpp 
    1>c:\documents and settings\hunter\mis documentos\visual studio 2008\projects\picrs232vcpp_prueba01\picrs232vcpp_prueba01\Form1.h(39) : error C2725: 'System::Exception' : no se puede producir o detectar un objeto administrado por valor o referencia 
    1>c:\documents and settings\hunter\mis documentos\visual studio 2008\projects\picrs232vcpp_prueba01\picrs232vcpp_prueba01\Form1.h(39) : error C2316: 'System::Exception' : no se puede detectar porque no se puede obtener acceso al destructor o al constructor de copias 
    1>El registro de compilación se guardó en el "file://c:\Documents and Settings\Hunter\Mis documentos\Visual Studio 2008\Projects\PicRS232VCPP_Prueba01\PicRS232VCPP_Prueba01\Debug\BuildLog.htm" 
    1>PicRS232VCPP_Prueba01 - 2 errores, 0 advertencias 
    ========== Generar: 0 correctos, 1 incorrectos, 0 actualizados, 0 omitidos ========== 


    A ver si al final resolvemos esta parte del problema.

    Saludos.
    La verdad no mancha los labios de quien la dice, sino la conciencia de quien la oculta.
    sábado, 7 de febrero de 2009 23:46
  •                      MessageBox::Show(ex->ToString()); 
    Juan Carlos Ruiz - http://juank.black-byte.com
    lunes, 9 de febrero de 2009 14:10
    Moderador
  • Al final es así.

    if(!serialPort1->IsOpen) 
                { 
                    try 
                    { 
                    serialPort1->Open(); 
                    } 
                    catch (Exception ^ex) 
                    { 
                        MessageBox::Show(ex->ToString()); 
                    } 
                } 


    Gracias por todo amigo.

    La verdad no mancha los labios de quien la dice, sino la conciencia de quien la oculta.
    lunes, 9 de febrero de 2009 21:31