hize una dll en vc++ que manipula listas pero no se si este correcta

onail
16 de Mayo del 2005
compile el proyecto y genero la dll pero la vverdad es que no se si este bien... kisiera que me ayudaran a saber como la utilzo en vb aora.
estos son los archivos de la dll
----------------------------
LA .H

# include <stdlib.h>
# define true 1
# define false 0



#define EXPORT extern "C" __declspec(dllexport)

struct celda
{ int elemento;
struct celda *sig;
};

typedef struct celda *lista;
typedef struct celda *posicion;


EXPORT lista crear(lista);


EXPORT int vacia(lista);

EXPORT posicion fin(lista);


EXPORT posicion primero(lista);

EXPORT posicion siguiente(posicion, lista);

EXPORT posicion anterior(posicion,lista);


EXPORT int recupera(posicion,lista);


EXPORT void suprime(posicion,lista);


EXPORT void borrar(lista);


EXPORT posicion localiza(int, lista);


EXPORT void intercambio(posicion, posicion);


EXPORT void insertar(int, posicion, lista);


EXPORT void ordena_asc(lista);

EXPORT void ordena_des(lista);


EXPORT void borrar_elemento(int, lista);
----------------------------------------------------------
EL CPP



#include <windows.h>
#include <dos.h>
#include "listas.h"


EXPORT lista crear(lista l)
{ l=(lista)new(struct celda);
l->sig=NULL;
return l;
}


EXPORT int vacia(lista l)
{ if(l->sig==NULL)
return true;
else
return false;
}

EXPORT posicion fin(lista l)
{ posicion a;
a=l;
while(a->sig!=NULL)
{ a=a->sig;
}
return a;
}

EXPORT posicion primero(lista l)
{ if(l!=NULL)
return l;
else
return NULL;
}

EXPORT posicion siguiente(posicion p, lista l)
{ if(p!=NULL)
return p->sig;
else
return NULL;
}

EXPORT posicion anterior(posicion p,lista l)
{ posicion q;
q=p;
while(q->sig!=p)
{ q=q->sig;
}
return q;
}

EXPORT int recupera(posicion p,lista l)
{ return p->sig->elemento;
}

EXPORT void suprime(posicion p,lista l)
{ if(p->sig!=NULL)
{ p->sig=p->sig->sig;}
}

EXPORT void borrar(lista l)
{ posicion tem,aux;
tem=primero(l);
aux=primero(l);
while(aux!=NULL)
{ suprime(tem,l);
aux=siguiente(tem,l);
}
free(tem);
free(aux);
}

EXPORT posicion localiza(int x, lista l)
{ posicion tem;
if(vacia(l)==false)
{ tem=primero(l);
do
{ if(tem->sig->elemento==x)
return tem;
else
tem=siguiente(tem,l);
} while(tem!=fin(l));
}
free(tem);
return NULL;
}

EXPORT void intercambio(posicion p1,posicion p2)
{ int x;
x=p1->sig->elemento;
p1->sig->elemento=p2->sig->elemento;
p2->sig->elemento=x;
}

EXPORT void insertar(int x,posicion p,lista l)
{ posicion tem;
tem=p->sig;
p->sig=(posicion)new(struct celda);
p->sig->elemento=x;
p->sig->sig=tem;
}

EXPORT void ordena_asc(lista l)
{ posicion p1, p2, p3;
p1=fin(l);
for(p2=primero(l); p2!=p1; p2=siguiente(p2,l))
{ for(p3=siguiente(p2,l); p3!=fin(l); p3=siguiente(p3,l))
{ if(recupera(p2,l)> recupera(p3,l))
{ intercambio(p2,p3);
}
}
}
}

EXPORT void ordena_des(lista l)
{ posicion p1, p2, p3;
p1=fin(l);
for(p2=primero(l); p2!=p1; p2=siguiente(p2,l))
{ for(p3=siguiente(p2,l); p3!=fin(l); p3=siguiente(p3,l))
{ if(recupera(p2,l)< recupera(p3,l))
{ intercambio(p2,p3);
}
}
}
}

EXPORT void borrar_elemento(int x, lista l)
{ posicion tem;
tem=localiza(x,l);
if(tem!=NULL)
suprime(tem,l);

}
-----------------------------------------
EL .DEF

EXPORTS
anterior
borrar
borrar_elemento
crear
fin
insertar
intercambio
localiza
ordena_asc
ordena_des
primero
recupera
siguiente
suprime
vacia