Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Re: Incluir DLL en proyecto MFC.

12 views
Skip to first unread message

melvis26

unread,
Apr 22, 2012, 3:14:55 PM4/22/12
to
melvis26 escribió el 18/04/2012 17:36 :
> ¡ Hola !
> Quisiera saber si es posible en un proyecto MFC de VC++ 2008, hacer una
> referencia a una dll, y como haría para poderla incluir.
> El caso es el siguiente:
> Estoy realizando un proyecto para comunicar el PIC a la PC vía USB,
> tengo la librería HIDClass.dll para poder realizar la conexión
> USB, copie la dll a la carpeta del proyecto, y utilice el siguiente
> código:
> #import "HIDClass.dll" no_namespace rename("EOF",
> "EndOfFile")
> Pero me sale el error:
> fatal error C1083: Error al cargar la biblioteca de tipo/DLL.
> Es por ello que quiera saber como puede hacer referencia a la DLL en un
> proyecto MFC. Gracias de antemano.
>
Gracias por contestar Cholo Lennon.
Bueno en este caso solo se trata de una biblioteca normal pero no cuento con la
biblioteca de importacion, solo tengo la DLL.
Como lo haria utilizando LoadLibrary/GetProcAddress?
Gracias nuevamente por la ayuda.

Cholo Lennon

unread,
Apr 23, 2012, 10:15:21 AM4/23/12
to
Hay varias cuestiones todavia para lograr hacer funcionar tu DLL.

- La DLL exporta solo funciones C o tambien clases C++?
- Si exporta clases C++, con que compilador fue realizada? El formato de
exportacion de clases es distinto en Borland/Embarcadero que en VC++ por
ejemplo.

Lo esperable para simplificar todo es que la DLL exporte solo funciones
C. Una forma facil de ver esto es usando la utilidad de linea de
comandos dumpbin (ubicada en el directorio bin de VC++) o Dependency
Walker por algo mas visual y completo (http://www.dependencywalker.com/)

El camino largo es tratar de generar la libreria de importacion desde la
DLL para usar un enlace implicito, no es un camino directo, pero se
puede intentar (el enlace explicito es la manera mas natural de usar una
DLL, simplemente se especifica la libraria de importacion en el linker y
lugo se usa normalmente en el codigo usando, o bien el header asociado o
los definiciones de las funciones creadas para tal fin):

http://support.microsoft.com/kb/131313
http://www.codeproject.com/Articles/146652/Creating-Import-Library-from-a-DLL-with-Header-Fil

El camino corto en este caso es usar enlace explicito o dinamico a
traves de APIs de Windows:

Supongamos que la DLL exporta una funcion con la forma:

int Sumar(int a, int b);

Para utilizarla deberas cargar manualmente la DLL, obtener un puntero a
la funcion en cuestion y luego invocar el mismo:

// Cargar la DLL
if (HMODULE hLib = LoadLibraryA("HIDClass.dll")) {
typedef int (WINAPI *SumarT)(int, int);

// Obtener el punto de entrada a la funcion en la DLL
if (SumarT pfnSumar =
reinterpret_cast<SumaT>(GetProcAddress(hLib, "Sumar")))
{
// Invocar la funcion
int resultado = pfnSumar(10, 20);

...

}
else
ErrorFuncionNoEncontrada(...);

// Descargar la DLL
FreeLibrary(hLib);
}
else
ErrorImposibleCargarDll(...);


Hay varios articulos en internet sobre como encapsular lo anterior
mediante alguna clase.

Saludos


--
Cholo Lennon
Bs.As.
ARG
0 new messages