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
Ir a la versión completa