EN

pcosmos.ca

l'univers de Philippe Choquette


Exemple d'une librairie

Dans un fichier nommé main.c :

#include <windows.h>
#include <math.h>
#include <string.h>

typedef struct
{
   double x;
   double y;
} point;


typedef struct
{
   point vertices[3];
   double perimeter;
   float extra;
} triangle;


BOOL APIENTRY DllMain(HANDLE hModule, DWORD dwReason, LPVOID lpReserved)
{
    return TRUE;
}


double distance(point a, point b)
{
   return sqrt((a.x - b.x) * (a.x - b.x) + (a.y - b.y) * (a.y - b.y));
}


__declspec(dllexport) int dll_demo(int n1, int n2, float copy, triangle* t, 
   double* avgx, double* avgy, char* str)
{
   t->perimeter = 0.0;
   t->perimeter += distance(t->vertices[0], t->vertices[1]);
   t->perimeter += distance(t->vertices[1], t->vertices[2]);
   t->perimeter += distance(t->vertices[2], t->vertices[0]);
   t->extra = copy;
   
   *avgx = (t->vertices[0].x + t->vertices[1].x + t->vertices[2].x) / 3.0;
   *avgy = (t->vertices[0].y + t->vertices[1].y + t->vertices[2].y) / 3.0;

   strcpy(str, "done");

   return n1 + n2;
}

Sur la ligne de commande :

cl main.c /LD /O2 /Fedll_demo.dll

Dans l'interpréteur : test_dll_demo.astl.
Exemple d'appel dans la librairie math : testmath.astl.

Les appels à une fonction dans une librairie retourne un object PCASTL toujours avec les membres suivants.

MembreType de valeur de retour de la fonction
ret_int32int, short, char, pointeur dans un OS 32-bit
ret_int64long long, pointeur dans un OS 64-bit
ret_doubledouble
ret_floatfloat