c++ - OpenCV C++ 与 extern "C"

标签 c++ c opencv compilation linker

我目前正在尝试制作一个程序,使用 openCV 从网络摄像头拍照并执行图形操作以在 openCV 中查找区域,然后将其传递给 .c 程序,该程序仅通过以下方式将信息发送到服务器端口编程。

我的问题是,尽管我为 openCV .cpp 代码中使用的函数创建了一个 .h 文件并将其包含在我的 .c 中,但仍然出现错误: error: Expected ')' before ' &' 标记

这是我的 simpleIS.h:

int captureimg();
int backgroundsub();
void noisesuppression(Mat &ptr);
void simplegetarea(Mat &img);

extern int area1,area2,area3,area4;

有什么想法吗?

最佳答案

您必须将所需的函数包装在其他 C++ 函数中,并使这些函数具有 extern“C”链接。您还必须拥有 C 数据结构来保存创建 C++ 类所需的内容。从 C 调用包装函数。

例如,如果您有这样的 cpp 函数:

int im_a_cxx_function(int , some_type, another_type &);

你创建一个包装函数:

extern "C" int im_a_cxx_wrapper_function(int i, 
                                          struct some_C_type *st_C, 
                                          struct another_C_type *at_C)
{
    some_type st;
    another_type at;

    set_some_type(&st,  st_C);
    set_another_type(&at, at_C);

    return im_a_cxx_function(i, st, at);
}

然后,在包装函数的 header 中:

#ifdef __cplusplus
extern "C" {
#endif
int im_a_cxx_wrapper_function(int i, struct some_C_type *st_C, 
                               struct another_C_type *at_C);
#ifdef __cplusplus
}
#endif

然后,将包装函数的 header 包含在 .c 文件中,并正常调用包装函数。主要是由于名称修改,您无法从 C 中调用没有 extern“C” 的函数,并且由于您无法控制库函数,因此必须将它们包装起来。您还可以保存指向 C++ 类型的不透明指针,但由于您不能使用构造函数,因此通常至少必须为它们编写工厂和删除函数。

关于c++ - OpenCV C++ 与 extern "C",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22181102/

相关文章:

javascript - matchTemplate 后的 opencv 黑色图像

python - OpenCV Python:窗口大小和鼠标事件坐标

c++ - 如何将 int 的数字分配给数组 c++

c++ - 是否定义了静态初始化实现的顺序?

c - 在链表中插入和删除节点

c - 如何在 C 语言中使用 SSE 内在函数计算单 vector 点积

opencv - 使用 ccache 和 CUDA 发布构建 OpenCV

c++ - Opencv - 从特征匹配中获取像素坐标

c++ - 在非托管 C++ 中读取数组 <Byte>

c - 基于CLRS教科书的归并排序