Pregunta ayuda con C++

  • sábado, 26 de diciembre de 2009 16:50
     
      Tiene código
    hola quiero hacer la palabra as de C# a C++/CLI encontre un ejemplo corto en la libreria que tiene Visual C++ pero no lo entiendo

    // CS_is_as.cpp
    // compile with: /clr
    using namespace System;

    interface class I {
    public:
    void F();
    };

    ref struct C : public I {
    virtual void F( void ) { }
    };

    template < class T, class U >
    Boolean isinst(U u) {
    return dynamic_cast< T >(u) != nullptr;
    }

    int main() {
    C ^ c = gcnew C();
    I ^ i = safe_cast< I ^ >(c); // is (maps to castclass in IL)
    I ^ ii = dynamic_cast< I ^ >(c); // as (maps to isinst in IL)

    // simulate 'as':
    Object ^ o = "f";
    if ( isinst< String ^ >(o) )
    Console::WriteLine("o is a string");
    }

    y el codigo que quiero ponerle a este

    private: System::Void toolStripButton3_Click(System::Object^  sender, System::EventArgs^  e) {
                if(this->ActiveMdiChild==nullptr)
                    return;
                Nuevo^ doc=this->ActiveMdiChild as Nuevo;
               

                if(doc==nullptr || !doc->DocumentChanged)
                    return;

                if(doc->FileName==L"")
                {
                    if(saveFileDialog1->ShowDialog()!=DialogResult==OK)
                        return;
                    if(saveFileDialog1->FileName==L"")
                        return;
                    doc->FileName=saveFileDialog1->FileName;
                }
                if(doc->FileName!=L"")
                    doc->SaveFile();

             }

    y si tambien me pueden ayudar con el codigo del dialogo donde me dice que OK s identificador no declarado

Todas las respuestas

  • lunes, 28 de diciembre de 2009 12:07
    Moderador
     
     
    On Mon, 28 Dec 2009 13:01:37 +0100, <iok> wrote:


    > hola quiero hacer la palabra as de C# a C++/CLI encontre un ejemplo

    > corto en la

    > libreria que tiene Visual C++ pero no lo entiendo

    >

    > // CS_is_as.cpp

    >

    > // compile with: /clr

    >

    > using namespace System;

    >

    >

    >

    > interface class I {

    >

    > public:

    >

    > void F();

    >

    > };

    >

    >

    >

    > ref struct C : public I {

    >

    > virtual void F( void ) { }

    >

    > };

    >

    >

    >

    > template < class T, class U >

    >

    > Boolean isinst(U u) {

    >

    > return dynamic_cast< T >(u) != nullptr;

    >

    > }

    >

    >

    >

    > int main() {

    >

    > C ^ c = gcnew C();

    >

    > I ^ i = safe_cast< I ^ >(c); // is (maps to castclass in IL)

    >

    > I ^ ii = dynamic_cast< I ^ >(c); // as (maps to isinst in IL)

    >

    >

    >

    > // simulate 'as':

    >

    > Object ^ o = "f";

    >

    > if ( isinst< String ^ >(o) )

    >

    > Console::WriteLine("o is a string");

    >

    > }

    > y el codigo que quiero ponerle a este

    >

    > private: System::Void toolStripButton3_Click(System::Object^ sender,

    > System::EventArgs^

    > e) {

    > if(this->ActiveMdiChild==nullptr)

    > return;

    > Nuevo^ doc=this->ActiveMdiChild as Nuevo;

    >

    >

    No necesitas hacer nada extra en este caso. Simplemente un moldeo típi
    co

    de C++:


    Nuevo^doc=dynamic_cast< Nuevo ^ >(this->ActiveMdiChild);



    > if(doc==nullptr || !doc->DocumentChanged)

    > return;

    >

    > if(doc->FileName==L"")

    > {

    > if(saveFileDialog1->ShowDialog()!=DialogResult==OK)

    > return;

    > if(saveFileDialog1->FileName==L"")

    > return;

    > doc->FileName=saveFileDialog1->FileName;

    > }

    > if(doc->FileName!=L"")

    > doc->SaveFile();

    >

    > }

    >

    > y si tambien me pueden ayudar con el codigo del dialogo donde me dice


    > que OK s

    > identificador no declarado


    Cambia el OK a Forms::DialogResult::OK (o parecido, escribo de memoria).


    Se trata de un tema de visibilidad y de orden de compilación de las

    cabeceras.


    Por cierto, también deberías comparar el FileName con nullptr. En el
    caso

    de que fuera tal, la comparación con L"" generaría una excepción.


    --

    Microsoft Visual C++ MVP => http://geeks.ms/blogs/rfog

    ========================
    ================

    El que nada duda, nada sabe.

    -- Proverbio griego.


    Visita mi blog sobre desarrollo: http://geeks.ms/blogs/rfog/