Bonjour,

je suis en train de développer des libraires pour windows (et linux), mais je me suis rendu compte que sous windows (MVC et MinGW) je dois utiliser les commande suivante.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
 
#if (defined WIN32 || defined WIN64 || defined _WIN64)
    #define X7S_CDECL __cdecl
    #define X7S_STDCALL __stdcall
    #define X7S_EXPORT __declspec(dllexport)
    #define X7S_IMPORT __declspec(dllimport) 
#else
    #define X7S_EXPORT
    #define X7S_CDECL
    #define X7S_STDCALL
    #define X7S_IMPORT
#endif

Le seul problème c'est que j'ai vu différente implémentation sur le net et je n'ai pas tres bien compris les différences entre ces dernieres.

D'apres le tutoriel de http://www.codeguru.com/cpp/cpp/cpp_...icle.php/c9855
et la FAQ c++ http://cpp.developpez.com/faq/vc/?page=DLL#MakeDynDll
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
 
#ifdef DLL_EXPORTS
   #define X7S_DECLSPEC X7S_EXPORT
#else 
   #define X7S_DECLSPEC X7S_IMPORT
#endif
alors que dans la libraries de OpenCV ils utilisent:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
#ifndef CVAPI
    #define CVAPI(rettype) CV_EXPORTS rettype CV_CDECL
#endif
je suis pas sur de comprendre la différence entre chacune et ne trouve pas de bon tutoriel sur le sujet.

----

Autre questions:

  • je viens de me rendre compte que je n'utilise jamais DLL_IMPORT et pourtant mon projet marche bien. pourquoi?
  • A quoi serve X7S_CDECL et X7S_STDCALL ?
  • MinGW a l'air aussi d'avoir besoin de ces commandes.
  • Il faut utiliser X7S_DECLSPEC seulement pour les class et les functions que l'on utilise en dehors, ou il y a t'il d'autre cas ?