Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   API de Windows (https://www.clubdelphi.com/foros/forumdisplay.php?f=7)
-   -   Como cargar una DLL hecha en delphi desde c++? (https://www.clubdelphi.com/foros/showthread.php?t=53876)

Ege 03-03-2008 22:13:01

Como cargar una DLL hecha en delphi desde c++?
 
He hecho una DLL en Delphi, y no la puedo cargar desde C++, me da error exactamenete cuando invoco alguna función de la DDL. Necesito cargar la DLL de forma estática y lo he hecho a partir de las funciones del API LoadLibrary y GetProcAddress.
De la DLL necesito crear instacias de un par de objetos e invocar algunas funciones propias de esos objetos.
Si alguien me puede dar un hint de porque el error o tiene algo de esto hecho se lo agradeceré.

también me pueden enviar sus ayudas a ege@lab.matcom.uh.cu

Gracias...

egostar 03-03-2008 22:41:11

Hola Ege, bienvenido al club

Te invito a que leas nuestra guia de estilo ya que estas infringiendola en dos situaciones que no están permitidas.
  1. Duplicas Hilos
  2. Solicitas ayuda a tu correo electrónico.

Además, para que se te pueda ayudar de una forma mas certera seria bueno que colocaras el código que estas usando para llamar a tu DLL para no estar adivinando el problema.

Salud OS

Ege 03-03-2008 23:46:24

Esclareciendo
 
Mis disculpas por las infracciones.

Para tratar de obtener, la vinculación de la DLL con Delphi, realicé una DLL sencilla que solamente contiene la función
function plusone(val : Integer) : Integer; export; stdcall; que simplemente suma 1 al parámetro val
En el archivo DPR incluí la cláusula export de la siguiente manera
Exports
plusone name 'plusone@4',
La clase de C++ que cargará la DLL es así
/* Carga.h*/
#define USELIB
#ifdef USELIB
extern "C" {
int __declspec(dllimport) __stdcall plusone(int);
}
#endif //USELIB

ref class Carga
{
public:
Carga(void);
~Carga(void);
int SumaUno(int i);

protected:
#ifndef USELIB
HINSTANCE hMyDLL;
FARPROC lpfnplusone;
typedef int (*pIIFUNC)(int);
pIIFUNC plusone;
#endif //USELIB

/*Carga.cpp*/
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

Carga::Carga(void)
{
#ifndef USELIB
hMyDLL = LoadLibrary("D:\\Delphi to C++\\DLL\\MyDLL.dll");
if(hMyDLL == NULL)
PostQuitMessage(1);
lpfnplusone = GetProcAddress(HMODULE(hMyDLL), "_plusone");
if(lpfnplusone == NULL)
PostQuitMessage(2);
plusone = pIIFUNC(lpfnplusone);
#endif //USELIB
}

Carga::~Carga(void)
{
#ifndef USELIB
if (hMyDLL != NULL)
FreeLibrary(hMyDLL);
#endif //USELIB
}

int Carga::SumaUno(int i)
{
int temp = plusone(i);
return i;
}

El error a la hora de compilar es el siguiente:
Error 1 error LNK2028: unresolved token (0A00000A) "extern "C" int __stdcall plusone(int)" (?plusone@@$$J14YGHH@Z) referenced in function "public: int __clrcall Carga::SumaUno(int)" (?SumaUno@Carga@@$$FQ$AAMHH@Z) Carga.obj


Gracias anticipadas y disculpen lo extenso que quedó el mensaje


La franja horaria es GMT +2. Ahora son las 15:14:54.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi