Contenido
Un ejemplo en C++ (compilado con Borland C++ 5.5) que usa la librería
BigNum_ltm.dll.
No seas demasiado crítico con el código usado, que lo mío no es el C++, je, je.
El código de ejemplo en C++
En el código se indica cómo compilarlo con Borland C++ 5.5 y con Visual C++ de VS2005
//-----------------------------------------------------------------------------
// BigNum_ltm_t.cpp
// Para usar la DLL BigNum_ltm.dll
//
// ©Guillermo 'guille' Som, 2006
// Fecha: 07/Sep/2006
//
// Para compilar con BCC55:
// bcc -WC -P -O2 -IE:\gnuDev\libmath BigNum_ltm_t.cpp
//
// Para compilar con C++ de VS2005:
// cl /D "WIN32" /D "_CONSOLE" BigNum_ltm_t.cpp
//-----------------------------------------------------------------------------
#include <windows.h>
#include <stdio.h>
#include <tommath.h>
#define BigNum mp_int
//typedef void (CALLBACK* FPInicializar)();
typedef BSTR (CALLBACK* FPToString)(BigNum);
typedef void (CALLBACK* FPIni)(BigNum*);
typedef BigNum (CALLBACK* FPFromInt)(unsigned int);
typedef BigNum (CALLBACK* FPFromString)(BSTR);
typedef BigNum (CALLBACK* FPMul)(BigNum, BigNum);
typedef BigNum (CALLBACK* FPDiv)(BigNum, BigNum, BigNum*);
int main()
{
HINSTANCE hDLL; // handle de la DLL
int ret;
// punteros a las funciones
FPToString toString;
FPIni ini;
FPFromInt fromInt;
FPFromString fromString;
FPMul mul;
FPDiv div;
ret = 0;
// Cargar la DLL
hDLL = LoadLibrary("BigNum_ltm.dll");
if( hDLL != NULL )
{
toString = (FPToString)GetProcAddress( hDLL, "BigNumToString");
if( !toString )
{
printf("Error al asignar la función.");
ret = 1;
}
ini = (FPIni)GetProcAddress( hDLL, "BigNumInit" );
if( !ini )
{
printf("Error al asignar la función.");
ret = 1;
}
fromInt = (FPFromInt)GetProcAddress( hDLL, "BigNumFromInt");
if( !fromInt )
{
printf("Error al asignar la función.");
ret = 1;
}
fromString = (FPFromString)GetProcAddress( hDLL, "BigNumFromString");
if( !fromString )
{
printf("Error al asignar la función.");
ret = 1;
}
mul = (FPMul)GetProcAddress( hDLL, "BigNumMul");
if( !mul )
{
printf("Error al asignar la función.");
ret = 1;
}
div = (FPDiv)GetProcAddress( hDLL, "BigNumDiv");
if( !div )
{
printf("Error al asignar la función.");
ret = 1;
}
// Si llegamos aquí, es que todo está bien
BigNum n1, n2, r1;
n1 = fromInt(12345);
n2 = fromString((BSTR)"2345");
// Multiplicamos los dos números
r1 = mul(n1, n2);
BSTR s;
s = toString(n1);
printf("%s x ", s);
s = toString(n2);
printf("%s = ", s);
s = toString(r1);
printf("%s\n", s);
// Para comprobar que da el mismo resultado
unsigned int u1 = 12345;
unsigned int u2 = 2345;
printf("%u x %u = %u\n", u1, u2, u1 * u2);
printf("\n");
n1 = fromString((BSTR)"100000000");
n2 = fromString((BSTR)"12345678901234567890123456789");
r1 = mul(n1, n2);
s = toString(n1);
printf("%s x ", s);
s = toString(n2);
printf("%s = ", s);
//printf("%s x %s = ", s1, s2);
s = toString(r1);
printf("%s\n", s);
BigNum r;
ini(&r);
n2 = fromInt(100);
n1 = fromInt(3);
r1 = div(n2, n1, &r);
s = toString(r1);
printf("resto= %s ", s);
s = toString(r);
printf("Divisor= %s\n", s);
}
FreeLibrary(hDLL);
return ret;
}