OpenCV中文网站

 找回密码
 立即注册
搜索
热搜: 安装 配置
查看: 3618|回复: 1

求助,C#调用使用了OpenCV的dll,执行算法时报内存错误

[复制链接]
发表于 2014-9-5 00:24:39 | 显示全部楼层 |阅读模式
之前用C++写的算法和测试程序,所以没有用Emgucv。
现在要求将算法封装成dll,用C#开发界面来调用。
调用过程中发现OpenCV的算法函数调用后直接报内存错误,而在原C++的测试程序中相同代码就不会有问题。

出问题的代码如下:

C#部分:
namespace LibTest
{
    class ATMAlert
    {
        public const string dllName = "ATMAlertLib.dll";
        [DllImport(dllName, CallingConvention = CallingConvention.Cdecl)]
        public static extern void test(IntPtr handler);
    }
}

C++库部分:
__declspec(dllexport) void test(void* handler)      //参数与算法无关,可以忽略
{
     char *data = new char[1280*720];
    memset(data, 0, 1280*720);
    Mat tempConMat(480, 640, CV_8UC1, data);
    vector<vector<Point> > contours;
    vector<vector<Point> > objContours;
    vector<vector<unsigned int> > objConCorHypIDs;
    vector<Vec4i> hierarchy;

    //flip(tempConMat, tempConMat, 0);        //这一行可以成功执行,说明Mat对象本身应无问题

    findContours(tempConMat, contours, hierarchy, CV_RETR_EXTERNAL, CHAIN_APPROX_NONE);    //执行这个算法后出现内存访问错误
    delete data;
}

代码如上,调用findContours()直接报内存访问错误,程序退出。
有哪位大神知道是什么问题,该如何解决么?小女在此先谢过了……

回复

使用道具 举报

发表于 2014-12-13 16:42:00 | 显示全部楼层
最近也很关心这方面的内容
不过网上了解的情况是,
使用C++/CLI作为C++和C#的过渡桥梁
即用C++/CLI对动态链接库进行封装
还没实践过。。。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|OpenCV中文网站

GMT+8, 2024-5-2 13:29 , Processed in 0.010088 second(s), 16 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表