• Viernes 8 de Noviembre de 2024, 21:52

Autor Tema:  Exportar funciones desde c++  (Leído 2750 veces)

xouba

  • Nuevo Miembro
  • *
  • Mensajes: 8
    • Ver Perfil
Exportar funciones desde c++
« en: Miércoles 6 de Julio de 2011, 01:23 »
0
Hola, estoy empezando a programar desde el entorno visual studio 2010. Mi duda es la siguiente:
Teniendo un código en c++ me gustaria utilizarlo como un dll, para ello creo un proyecto en visual c++ y como biblioteca de clases, entonces, entiendo que el código debe ubicarse en el archivo .cpp y si quiero exportar funciones a otro proyecto en otro lenguaje por ejemplo c# ¿Qué debería hacer? ¿Poner los enunciados de las funciones en el archivo .h?
Muchas gracias y perdón si repito post pero navengando por el foro no solucioné mis dudas.

ProfesorX

  • Moderador
  • ******
  • Mensajes: 796
  • Nacionalidad: mx
    • Ver Perfil
Re: Exportar funciones desde c++
« Respuesta #1 en: Miércoles 6 de Julio de 2011, 02:59 »
0
Hola xouba, bienvenido al foro.

Bueno, para aclarar un poco tu duda, te dire que si, lo mas recomendables es colocar en el archivo .h el encabezado de tus funciones/clases, y la definicion de tus funciones/clases en otro archivo.

Te dire sin embargo que es posible colocar todo el codigo de tu clase y no solo los encabezados en un archivo .h aunque no se recomienda.

Pero deberas ademas utilizar las directivas dllexport/dllimport segun desees exportar(archivo dll) o importar(archivo exe) el codigo.

No tengo un ejemplo a la mano en español de como debes hacerlo exactamente, pero buscando en google puedes encontrar mas informacion. Prueba buscando dllexport.

Te dejo algunos enlaces (en ingles) con mas informacion, o busca mas por tu cuenta ;)

Exportar DLL

Exportar DLL para usarla en C

Importar DLL

Curso rapido de como exportar a una DLL

Saludos :)

NOTA:
==================================================================
Este foro es para ayudar, aprender, compartir... usenlo para eso,
NO SE RESUELVEN DUDAS POR MENSAJE PRIVADO Y MENOS POR CORREO
==================================================================

xouba

  • Nuevo Miembro
  • *
  • Mensajes: 8
    • Ver Perfil
Re: Exportar funciones desde c++
« Respuesta #2 en: Domingo 10 de Julio de 2011, 16:57 »
0
Muchas gracias por tu respuesta. He estado probando la utilización de dllimport y finalmente me funciona de la siguiente manera:

Código: C++
  1. // prueba.h
  2. #pragma once
  3.  
  4. using namespace System;
  5.  
  6.     extern "C" __declspec(dllexport) int __cdecl suma();
  7.  
  8.     class Clase1
  9.     {
  10.     public: 
  11.         static int suma();
  12.     };
  13.  
  14.  

Código: C++
  1. // Archivo DLL principal.
  2.  
  3. #include "stdafx.h"
  4. #include "prueba.h"
  5.  
  6. int suma(){return Clase1::suma();};
  7. int Clase1::suma()
  8. {
  9.     return 8;
  10. }
  11.  

Código: C#
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Windows.Forms;
  9. using System.Runtime.InteropServices;
  10.  
  11. namespace WindowsFormsApplication1
  12. {
  13.     public partial class Form1 : Form
  14.     {
  15.         public Form1()
  16.         {
  17.             InitializeComponent();
  18.         }
  19.         [DllImport("prueba.dll"/*, EntryPoint = "suma", CharSet = CharSet.Unicode*/)]
  20.         public static extern int suma();
  21.         private void button1_Click(object sender, EventArgs e)
  22.         {
  23.             listBox1.Items.Add("Suma es " + suma());
  24.         }
  25.     }
  26. }
  27.  

Es un código muy sencillito donde desde mi interfaz en c# importo una función de mi biblioteca en c++ para utilizarla al pulsar el botón. Me gustaría saber si esta forma de relacionar mis 2 proyectos es "eficiente" o podría mejorarlo, para ya poder empezar a complicar la cosa. Muchas gracias de antemano.