无法在dll中找到名为*的入口点

时间:2010-08-02 07:56:36

标签: c++ visual-c++ interop

我有一个C ++项目,在头文件中有以下定义:

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);

我在VS 2008中编译它。它可以编译!到目前为止一切都很好。

接下来我想从.Net调用C ++ dll,我做一个标准的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);

但是当我运行代码时,我得到“无法在DLL'gpc.dll'中找到入口点名称*”。

我认为我的C ++ vcproj设置必定是错误的,因为似乎没有导出定义。知道如何解决这个问题吗?

3 个答案:

答案 0 :(得分:4)

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

在c ++ vc项目中尝试上面。

答案 1 :(得分:2)

gpc_polygon_clip未标记为导出。它应该使用__declspec(dllexport)。 看看here

答案 2 :(得分:1)

有很多方法。可能最简单的方法是在__declspec(dllexport) / __declspec(dllimport)前加上声明(分别编译DLL或使用它时)