我有一个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设置必定是错误的,因为似乎没有导出定义。知道如何解决这个问题吗?
答案 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或使用它时)