Libraries windows (__cdecl, __stdcall, __declspec(dllexport), __declspec(dllimport))
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:
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:
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:
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 ?