EN

pcosmos.ca

l'univers de Philippe Choquette

Accueil
Nouvelles
Profil
Contact
Half-Life
Musique
PCASTL
Informatique
Vidéos
Lecture
OpenGL
Éléments
sids du C64
Liens
Opérateurs
Types de données
Fonctions internes
Structure de l'arbre
Traitement par lots
Exemples
Interpréteur

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
Mobile
linkedin
bandcamp
steam