Programación General > C/C++

 Exportar funciones desde c++

(1/1)

xouba:
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:
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 :)

xouba:
Muchas gracias por tu respuesta. He estado probando la utilización de dllimport y finalmente me funciona de la siguiente manera:


--- Código: C++ ---// prueba.h#pragma once using namespace System;     extern "C" __declspec(dllexport) int __cdecl suma();     class Clase1    {     public:         static int suma();    };  

--- Código: C++ ---// Archivo DLL principal. #include "stdafx.h"#include "prueba.h" int suma(){return Clase1::suma();};int Clase1::suma(){    return 8;} 

--- Código: C# ---using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;using System.Runtime.InteropServices; namespace WindowsFormsApplication1{    public partial class Form1 : Form    {        public Form1()        {            InitializeComponent();        }        [DllImport("prueba.dll"/*, EntryPoint = "suma", CharSet = CharSet.Unicode*/)]        public static extern int suma();        private void button1_Click(object sender, EventArgs e)        {            listBox1.Items.Add("Suma es " + suma());        }    }} 
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.

Navegación

[0] Índice de Mensajes

Ir a la versión completa