Tutorial :Unable to find an entry point named * in dll



Question:

I have a C++ project with the following definition in the header file:

typedef enum                        /* Set operation type                */  {    GPC_DIFF,                         /* Difference                        */    GPC_INT,                          /* Intersection                      */    GPC_XOR,                          /* Exclusive or                      */    GPC_UNION                         /* Union                             */  } gpc_op;    typedef struct                      /* Polygon vertex structure          */  {    double              x;            /* Vertex x component                */    double              y;            /* vertex y component                */  } gpc_vertex;    typedef struct                      /* Vertex list structure             */  {    int                 num_vertices; /* Number of vertices in list        */    gpc_vertex         *vertex;       /* Vertex array pointer              */  } gpc_vertex_list;    typedef struct                      /* Polygon set structure             */  {    int                 num_contours; /* Number of contours in polygon     */    int                *hole;         /* Hole / external contour flags     */    gpc_vertex_list    *contour;      /* Contour array pointer             */  } gpc_polygon;    void gpc_polygon_clip        (gpc_op           set_operation,                                gpc_polygon     *subject_polygon,                                gpc_polygon     *clip_polygon,                                gpc_polygon     *result_polygon);  

And I compile it in VS 2008. It can compile! So far so good.

Next I want to call the C++ dll from .Net, and I do a standard PInvoke:

[DllImport("gpc.dll")]  private static extern void gpc_polygon_clip([In]     GpcOperation set_operation,                                              [In]     ref gpc_polygon subject_polygon,                                              [In]     ref gpc_polygon clip_polygon,                                              [In, Out] ref gpc_polygon result_polygon);  

But when I run the code, I get an "unable to find an entry point name * in DLL 'gpc.dll'".

I think my C++ vcproj setting must be wrong, because it seems that the definition is not exported. Any idea how to fix this?


Solution:1

extern "C" __declspec(dllexport) void gpc_polygon_clip        (gpc_opset_operation,                                gpc_polygon     *subject_polygon,                                gpc_polygon     *clip_polygon,                                gpc_polygon     *result_polygon);  

try out above in c++ vc project.


Solution:2

gpc_polygon_clip is not marked for export. It should use __declspec( dllexport ). Have a look here.


Solution:3

There are a number of ways. Probably the easiest is to prefix __declspec(dllexport) / __declspec(dllimport) to the declaration (when compiling the DLL or using it, respectively)


Note:If u also have question or solution just comment us below or mail us on toontricks1994@gmail.com
Previous
Next Post »