none
Pasar información entre C++ y C# RRS feed

  • Pergunta

  • Hola amigos, tengo un problema, necesito pasar informacion entre dos aplicasiones (c# y c++)
    ambas aplicaciones por separadas obtienen sierta informacion y necesito pasarla de una a otra
    la c++ es un dll (que la carga un programa) y la c# es un windows forms.
    He probado con los siguiente y no me resulta
    
    Este es mi clase en c#. Uso una libreria recomendada pero sin efecto UnmanagedExports
    
    using RGiesecke.DllExport;
    using System.Runtime.InteropServices;
    using System.Runtime.InteropServices;
    
    namespace SKYNET
    {
        public class DataCallBack
        {
            //Aqui es para recibir de la libreria c++
            [DllExport(ExportName = "ReceiveCallBack", CallingConvention = CallingConvention.StdCall)]
    		
            public static void ReceiveCallBack(byte[] data)
            {
                //Codigo donde proceso esa información
            }
    
            //Aqui envio a la libreria c++
            [DllImport("plusplus.dll")]
            private static extern void Receive(byte[] toSend);
    		
            public static void SendCallBack(byte[] toSend)
            {
                Receive(toSend);
            }
        }
    }
    
    Esta es parte de la clase c++
    class Steam_Game_Coordinator
    {
    public:
    
    #define DLLEXPORT __declspec (dllexport)
    
    	DLLEXPORT void Receive(const void* data)
    	{
    		//Codigo donde proceso esa información
    	};
    };
    
    No me funsionan ni de un lado ni de otro... :xd 
    Si me pudieran sugerirme un metodo para implementarlo me seria de mucha ayuda.
    Saludos y gracias de antemano.
    
    
    
    
    
    
    
    

    domingo, 9 de agosto de 2020 04:05

Respostas

  • No te puedo decir nada acerca de esa librería de terceros que mencionas porque no la conozco. Pero la otra parte, es decir, el DllImport para llamar desde C# a C++, en principio es correcta. Ese es el procedimiento a seguir: se declara la librería, se decora con [DllImport] y luego se puede llamar a ese método desde C#.

    Si no funciona, tiene que ocurrir algún otro problema que no es obvio a la vista del código fuente. Por ejemplo, que la Dll no esté ubicada en una carpeta donde la encuentre el DllImport, o que sea de 32 bits y la estés llamando desde 64 bits (o viceversa), o que la convención de llamada no concuerde (PascalCall/StdCall, etc), o alguna otra cosa similar. Pero el principio que estás siguiendo es válido, el problema tiene que encontrarse en los detalles.

    • Marcado como Resposta Hackerprod quarta-feira, 26 de agosto de 2020 00:50
    domingo, 9 de agosto de 2020 07:15
    Moderador

Todas as Respostas

  • No te puedo decir nada acerca de esa librería de terceros que mencionas porque no la conozco. Pero la otra parte, es decir, el DllImport para llamar desde C# a C++, en principio es correcta. Ese es el procedimiento a seguir: se declara la librería, se decora con [DllImport] y luego se puede llamar a ese método desde C#.

    Si no funciona, tiene que ocurrir algún otro problema que no es obvio a la vista del código fuente. Por ejemplo, que la Dll no esté ubicada en una carpeta donde la encuentre el DllImport, o que sea de 32 bits y la estés llamando desde 64 bits (o viceversa), o que la convención de llamada no concuerde (PascalCall/StdCall, etc), o alguna otra cosa similar. Pero el principio que estás siguiendo es válido, el problema tiene que encontrarse en los detalles.

    • Marcado como Resposta Hackerprod quarta-feira, 26 de agosto de 2020 00:50
    domingo, 9 de agosto de 2020 07:15
    Moderador
  • Hola Hackerprod, 

      

    ¿Alguna novedad sobre la consulta realizada? ¿Han sido útiles las  respuestas proporcionadas?  

    Espero su respuesta.  

    Cualquier duda referente a productos Microsoft, puedes consultarnos. Es un gusto informarte. 

    Gracias por usar los foros de MSDN.  

    Eric Ruiz

    ____________________________  

     

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde.  

    Microsoft ofrece este servicio de forma gratuita, con la finalidad de ayudar a los usuarios y la ampliación de la base de datos de conocimientos relacionados con los productos y tecnologías de Microsoft.   

    Este contenido es proporcionado "tal cual" y no implica ninguna responsabilidad de parte de Microsoft. 

    segunda-feira, 10 de agosto de 2020 16:06
    Moderador