Hola de nuevo JF:Tal como se crea la dll del mensaje:
http://212.163.180.66/ubb/Forum1/HTML/000230.html
para acceder a ella dinámicamente hacemos lo siguiente:
void LlamarASuma(void)
{
typedef int (__stdcall *pSuma)(int, int);
pSuma Suma;
HINSTANCE hLib = LoadLibrary("dll.dll");
if (hLib)
{
Suma = (pSuma) GetProcAddress(hLib, "@Suma$qii");
if (Suma)
ShowMessage( Suma(2,3) );
FreeLibrary(hLib);
}
}
En este caso usamos "@Suma$qii" porque es el nombre con que se exporta la función, ya que C++ "decora" la función con símbolos según sus parámetros. Para exportar la función sin esos símbolos podríamos usar:
extern "C" PUBLIC int Suma(int a, int b);
en el .h de la dll. Entonces se exportaría como "_Suma" ya que C a diferencia de C++ solo añade el _ al principio de las funciones... bueno, que para el caso da igual, lo que nos interesa es poder averiguar con que nombre se exporta la función que nos interese y para ello podemos usar el comando TDUMP.EXE del siguiente modo:
tdump -ee dll.dll
esto nos da una lista de todas las funciones exportadas con su nombre exacto.