Невозможно найти точку входа с именем * в DLL - PullRequest
1 голос
/ 02 августа 2010

У меня есть проект 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. Он может компилироваться!Пока все хорошо.

Далее я хочу вызвать C ++ dll из .Net, и я делаю стандартный 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 ]

4 голосов
/ 02 августа 2010
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.

2 голосов
/ 02 августа 2010

gpc_polygon_clip не помечен для экспорта. Следует использовать __declspec (dllexport). Посмотрите здесь .

1 голос
/ 02 августа 2010

Есть несколько способов.Вероятно, самый простой - это префикс __declspec(dllexport) / __declspec(dllimport) к объявлению (при компиляции DLL или ее использовании соответственно)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...