ayuda con C++
-
sábado, 26 de diciembre de 2009 16:50
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:07ModeradorOn 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/

