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