Unable to find an entry point named * in dll

限于喜欢 提交于 2019-12-24 17:47:58

问题


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?


回答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.




回答2:


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




回答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)



来源:https://stackoverflow.com/questions/3385970/unable-to-find-an-entry-point-named-in-dll

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!