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... |
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.
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 |
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