diff --git a/Common/GmshAPI.h b/Common/GmshAPI.h
index a626e3804d81a8b98f38bec7110a255bf67c1903..652560261261bd97154b64b642b843d91d64b52f 100644
--- a/Common/GmshAPI.h
+++ b/Common/GmshAPI.h
@@ -17,6 +17,12 @@
 #ifndef _GMSH_API_H_
 #define _GMSH_API_H_
 
+#if defined(WIN32)
+#define GMSH_API __declspec(dllexport) int
+#else
+#define GMSH_API int
+#endif
+
 typedef struct gmshEntity{ int dim, tag; };
 typedef struct gmshIntVector{ int n; int *v; };
 typedef struct gmshDoubleVector{ int n; double *v; };
@@ -27,38 +33,38 @@ typedef struct gmshEntityVector{ int n; gmshEntity *v; };
 extern "C"
 {
   /* Gmsh */
-  int gmshInitialize(int argc, char **argv);
-  int gmshFinalize();
-  int gmshOpen(const char *fileName);
-  int gmshMerge(const char *fileName);
-  int gmshExport(const char *fileName);
-  int gmshClear();
+  GMSH_API gmshInitialize(int argc, char **argv);
+  GMSH_API gmshFinalize();
+  GMSH_API gmshOpen(const char *fileName);
+  GMSH_API gmshMerge(const char *fileName);
+  GMSH_API gmshExport(const char *fileName);
+  GMSH_API gmshClear();
 
   /* Gmsh Options */
-  int gmshOptionsSetNumber(const char *name, double value);
-  int gmshOptionsGetNumber(const char *name, double *value);
+  GMSH_API gmshOptionsSetNumber(const char *name, double value);
+  GMSH_API gmshOptionsGetNumber(const char *name, double *value);
 
   /* Gmsh Model */
-  int gmshModelCreate(const char *name);
-  int gmshModelSetCurrent(const char *name);
-  int gmshModelDestroy();
-  int gmshModelMesh(int dim);
-  int gmshModelAddEmbeddedVertex(int tag, int inDim, int inTag);
+  GMSH_API gmshModelCreate(const char *name);
+  GMSH_API gmshModelSetCurrent(const char *name);
+  GMSH_API gmshModelDestroy();
+  GMSH_API gmshModelMesh(int dim);
+  GMSH_API gmshModelAddEmbeddedVertex(int tag, int inDim, int inTag);
 
   /* Gmsh Model Geo Internals */
-  int gmshModelGeoAddVertex(int *tag, double x, double y, double z, double lc);
-  int gmshModelGeoAddLine(int *tag, int startVertexTag, int endVertexTag);
-  int gmshModelGeoAddPolyLine(int *tag, const gmshIntVector *vertexTags);
-  int gmshModelGeoExtrude(gmshEntityVector *in, double dx, double dy, double dz,
-                          gmshEntityVector *out);
-  int gmshModelGeoSynchronize();
+  GMSH_API gmshModelGeoAddVertex(int *tag, double x, double y, double z, double lc);
+  GMSH_API gmshModelGeoAddLine(int *tag, int startVertexTag, int endVertexTag);
+  GMSH_API gmshModelGeoAddPolyLine(int *tag, const gmshIntVector *vertexTags);
+  GMSH_API gmshModelGeoExtrude(const gmshEntityVector *in, double dx, double dy,
+                               double dz, gmshEntityVector *out);
+  GMSH_API gmshModelGeoSynchronize();
 
   /* Gmsh Model OCC Internals */
-  int gmshModelOCCAddVertex(int *tag, double x, double y, double z, double lc);
-  int gmshModelOCCAddLine(int *tag, int startVertexTag, int endVertexTag);
-  int gmshModelOCCExtrude(const gmshEntityVector *in, double dx, double dy, double dz,
-                          gmshEntityVector *out);
-  int gmshModelOCCSynchronize();
+  GMSH_API gmshModelOCCAddVertex(int *tag, double x, double y, double z, double lc);
+  GMSH_API gmshModelOCCAddLine(int *tag, int startVertexTag, int endVertexTag);
+  GMSH_API gmshModelOCCExtrude(const gmshEntityVector *in, double dx, double dy,
+                               double dz, gmshEntityVector *out);
+  GMSH_API gmshModelOCCSynchronize();
 }
 
 #endif