Usar una dll en MinGw

Iniciado por davrodgar1, 13 Marzo 2017, 15:12 PM

0 Miembros y 1 Visitante están viendo este tema.

davrodgar1

Buenas,

Como indica el titulo quiero llamar a una función de una dll, aunque el objetivo final es crear una dll donde se use una función que se llama de una dll aun me encuentro en el primer paso.

Cuento con una dll creada por un tercero por lo que poco puede responder sobre ella, además cuento con un .h de la misma.

Por ahora he intentando llevar a cabo este programa

Código (cpp) [Seleccionar]
#include <stdio.h>
#include <windows.h>
#include <iostream>


typedef double (CALLBACK* CPType)(const char *Output, const char *Name1, double Prop1, const char *Name2, double Prop2, const char *Ref); // Prototipo para poder utilizar Coolprops


HINSTANCE dllHandle;
CPType CPPtr;

int main(void){
double ro;
dllHandle = LoadLibrary("CoolProp.dll");
if (!dllHandle) {
     std::cout << "Error en la carga dll\n";
  } else {

CPPtr = (CPType)GetProcAddress(dllHandle,"PropsSI");


ro = CPPtr("D","P",100000,"T",273.15,"water");
std::cout<<ro;

}
system("PAUSE");
return 0;

}


pero no carga la dll correctamente, saltando siempre el mensaje Error en la carga dll.

Para compilar estoy usando MinGw, estando en una misma carpeta la dll y el cpp por medio del comando g++ -o ejecutable código.cpp

Un saludo,
David


· Los códigos deben ir en etiquetas GeSHi
>aquí las reglas del foro
-Engel Lex

Borito30

#1
Para cargar la libreria:
Código (cpp) [Seleccionar]
HINSTANCE hGetProcIDDLL = LoadLibrary("libreria");´

Para resolver su funcion:
Código (cpp) [Seleccionar]
f_funci funci = (f_funci)GetProcAddress(hGetProcIDDLL, "funci");
 if (!funci) {
   std::cout << "could not locate the function" << std::endl;
   return EXIT_FAILURE;
 }


En la dll le defines el export para poder utilizarla:
Código (cpp) [Seleccionar]
int __declspec(dllexport) __stdcall funci() {
  // ...
}
Estoy en contra del foro libre y la Sección de juegos y consolas (distraen al personal)

ivancea96

Si hay un error, el código del error lo obtendrás llamando a GetLastError. Para ver el texto de ese código de error, tienes la función Formatmessage. De todos modos, si no quieres utilizar FormatMessage, tienes esta web con los códigos de error: https://msdn.microsoft.com/en-us/library/windows/desktop/ms681381(v=vs.85).aspx