无法计算表达式,因为本机框架位于调用堆栈和system.accessviolationexception之上

时间:2013-11-08 15:51:22

标签: c# opencv

我使用c#。

public partial class MainForm : Form
{

    private CvCapture VideoCapture;

    private IplImage frame;
    private IplImage imgMain;

    public MainForm()
    {
        InitializeComponent();
    }



    private void btnVideo_Click(object sender, EventArgs e)
    {
        double vidWidth, vidHeight;

        try
        {
            VideoCapture = highgui.CvCreateCameraCapture(0);
        }
        catch (Exception except)
        {
            MessageBox.Show(except.Message);
        }

        if (btnVideo.Text.CompareTo("Start Video") == 0)
        {

            if (VideoCapture.ptr == IntPtr.Zero)
            {
                MessageBox.Show("badtrip ah!!!");
                return;
            }

            btnVideo.Text = "Stop Video";

            highgui.CvSetCaptureProperty(ref VideoCapture, highgui.CV_CAP_PROP_FRAME_WIDTH, 640);
            highgui.CvSetCaptureProperty(ref VideoCapture, highgui.CV_CAP_PROP_FRAME_HEIGHT, 480);

            highgui.CvQueryFrame(ref VideoCapture);

            vidWidth = highgui.cvGetCaptureProperty(VideoCapture, highgui.CV_CAP_PROP_FRAME_WIDTH);
            vidHeight = highgui.cvGetCaptureProperty(VideoCapture, highgui.CV_CAP_PROP_FRAME_HEIGHT);

            picBoxMain.Width = (int)vidWidth;
            picBoxMain.Height = (int)vidHeight;


            timerGrab.Enabled = true;
            timerGrab.Interval = 42;
            timerGrab.Start();

        }

        else
        {
            btnVideo.Text = "Start Video";
            timerGrab.Enabled = false;

            if (VideoCapture.ptr == IntPtr.Zero)
            {
                highgui.CvReleaseCapture(ref VideoCapture);
                VideoCapture.ptr = IntPtr.Zero;
            }
        }
    }

    private void timerGrab_Tick(object sender, EventArgs e)
    {
        try
        {
            frame = highgui.CvQueryFrame(ref VideoCapture);

            if (frame.ptr == IntPtr.Zero)
            {
                timerGrab.Stop();
                MessageBox.Show("??");
                return;
            }

            imgMain = cxcore.CvCreateImage(cxcore.CvGetSize(ref frame), 8, 3);

            picBoxMain.Image = highgui.ToBitmap(imgMain, false);

            cxcore.CvReleaseImage(ref imgMain);
            //cxcore.CvReleaseImage(ref frame);
        }
        catch (Exception excpt)
        {
            MessageBox.Show(excpt.Message);
        }
    }
}

问题是在我打破所有并逐步通过调试器之后,程序停在某个代码处。

它停止的代码在这里:frame = highgui.CvQueryFrame(ref VideoCapture); 错误是它表示无法计算表达式,因为本机帧位于调用堆栈的顶部。

然后当我尝试转移+ F11时。还有另一个错误,说system.accessviolationexception。

堆栈跟踪说:在System.Runtime.InteropServices.Marshal.CopyToManaged(IntPtr源,对象目标,Int32 startIndex,Int32长度)    在CxCore.IplImage.get_ImageDataDb()

  

这是我在更改使用的c#opencv包装时遇到的错误   从cvlib到cvwrapcs230d。

     

此项目中使用的DLL也包含在文件夹中。

     

但是当我将包装器从cvwrapcs230d更改为cvwrap230时,这是   我得到的错误。

     

第一个注释是第二个使用的cvwrapcs230d包装器   cvwrapcs230包装器。

     

第一注:cvwrapcs230d   -Thrown:“无法加载DLL'cvwrapcpp230':找不到指定的模块。(HRESULT异常:0x8007007E)”   (System.DllNotFoundException)异常消息=“无法加载DLL   'cvwrapcpp230':找不到指定的模块。 (例外   来自HRESULT:0x8007007E)“,异常类型=   “System.DllNotFoundException”异常消息“无法加载DLL   'cvwrapcpp230':找不到指定的模块。 (例外   来自HRESULT:0x8007007E)“字符串异常   键入“System.DllNotFoundException”字符串   -Thrown:“'cvlib'的类型初始化程序引发了异常。” (System.TypeInitializationException)异常消息=“类型   'cvlib'的初始化程序引发了异常。“,异常类型=   “System.TypeInitializationException”异常消息“类型   'cvlib'的初始化程序引发了异常。“字符串异常   键入“System.TypeInitializationException”字符串已停止   例外

     

第二个注意:cvwrapcs230   -Thrown:“无法加载DLL'cvwrapcpp230':找不到指定的模块。(HRESULT异常:0x8007007E)”   (System.DllNotFoundException)异常消息=“无法加载DLL   'cvwrapcpp230':找不到指定的模块。 (例外   来自HRESULT:0x8007007E)“,异常类型=   “System.DllNotFoundException”异常消息“无法加载DLL   'cvwrapcpp230':找不到指定的模块。 (例外   来自HRESULT:0x8007007E)“字符串异常   键入“System.DllNotFoundException”字符串   -cvCreateCameraCapture cvlib.cvCreateCameraCapture(index = {unknown})index {unknown} int

0 个答案:

没有答案