Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Re: Como puedo llamar a una funcion escrita en C++ desde C#?

318 views
Skip to first unread message

Jesús López

unread,
Feb 29, 2008, 3:39:31 AM2/29/08
to
¿Y qué clase de función es?

Resulta que en C++ puedes hacer código gestionado igual que en C#. Si es
eso, entonces es como siempre, creas una referencia a la dll y ya está.

En C++ también puedes hacer componentes COM. En este caso necesitarías crear
una referencia COM en tu proyecto C#.

Por último en C++ puedes hacer funciones al estilo del API Win32. Entonces
necesitarías llamar a la función mediante PInvoke.

Saludos:

Jesús López

"Rick" <zata...@gmail.com> escribió en el mensaje
news:OMZkaRme...@TK2MSFTNGP02.phx.gbl...
> Que tal foro, ya compile el proyecto C++ con /clr para poder agregar una
> referencia de mi proyecto C en C#
>
> ahora quiero llamar una funcion de mi proyecto C++ en C#, que declaracion
> debo hacer?
>
>
> --
> Saludos Cordiales!!
>
> e-Ricc
>


RFOG

unread,
Feb 29, 2008, 3:49:40 AM2/29/08
to
En Sat, 29 Mar 2008 00:47:58 +0100, Rick <zata...@gmail.com> escribió:

> Que tal foro, ya compile el proyecto C++ con /clr para poder agregar una
> referencia de mi proyecto C en C#
>
> ahora quiero llamar una funcion de mi proyecto C++ en C#, que declaracion
> debo hacer?
>
>

Como ya te ha comentado Jesús, el compilar mediante /clr no quiere decir
que ya puedas usar lo escrito en C++ puro desde C#. De hecho, C# no verá
absolutamente nada de ese código sin usar Interop.

Suponiendo que has compilado tu proyecto escrito en C++ normal con /clr,
ahora es el momento de definir, dentro de ese mismo código fuente, clases
del tipo "ref class" o "value class" que envuelvan a ese código.

Algo así.

Imagina que tienes una clase en C++ nativa:

class ClaseNativa
{
public:
ClaseNativa(void){...}
int MetodoNativo(TCHAR *cadena){...}
};

Debes "envolverla":

ref class ClaseManejada
{
ClaseNativa nativa;
public:
ClaseManejada(){}
int MetodoManejado(String ^s)
{
IntPtr ps=Marshal::StringToHGlobalUni(s);
TCHAR *pChar=(TCHAR *)ps.ToPointer();
return MetodoManejado(pChar);
}
}

Es sólo un ejemplo.

--
Microsoft Visual C++ MVP
========================
Mi blog sobre programación: http://geeks.ms/blogs/rfog
Mi blog sobre literatura: http://rfog.blogsome.com
Libros, ciencia ficción y programación
========================================
Vuestra alegría es vuestra tristeza sin máscara.
-- Khalil Gibran. (1883-1931) Ensayista, novelista y poeta libanés.

Rick

unread,
Mar 3, 2008, 11:36:55 AM3/3/08
to
Gracias a ambos lo intentaré asi

Saludos!

"Rick" <zata...@gmail.com> escribió en el mensaje
news:OMZkaRme...@TK2MSFTNGP02.phx.gbl...

> Que tal foro, ya compile el proyecto C++ con /clr para poder agregar una
> referencia de mi proyecto C en C#
>
> ahora quiero llamar una funcion de mi proyecto C++ en C#, que declaracion
> debo hacer?
>
>

> --
> Saludos Cordiales!!
>
> e-Ricc
>


0 new messages