0

我使用 Matlab 编码器从 Mathlab .m 文件创建了一个 dll 文件。在matlab中,matlab代码运行良好,没有任何错误,DLL创建成功。MV2010 编译并运行良好。但是,当软件在 Visual Studio 中从此 DLL 调用任何函数时,我会在内存位置得到“未处理的异常”,在另一个内存位置得到“访问冲突读取位置”。

我认为创建的 dll 取决于另一个丢失的 dll。所以,我使用依赖 Walker 来检查依赖。但是,依赖遍历器没有显示任何缺失的依赖。

Matlab 函数接受 5 个输入变量(四个作为双精度,一个作为一维双精度数组)并返回 4 个双精度值。所以我认为这可能是我传递给matlab生成的代码的数组的大小很小。所以,我重新调整了数组的大小。原始大小是 750,而新大小是 5000。仍然得到相同的未处理异常。

知道如何调试这个未处理的异常吗?还有什么我需要检查的吗?

/* 函数声明 */

extern void mat3(double ValueF, double DesiredValue, double io, double del, emxArray_real_T *a, double *status, double *slope_deg, double *fval, double *SVal);

我在 MS2010 中调用此方法,如下所示。

 double lValueF = 166.6;
 double lDesiredValue = 42.00;
 double io = 1.0;
 double del = 4.0;

 emxArray_real_T *lInputRoi;
 // a = emxCreate_real_T(height,width);
 lInputRoi = emxCreate_real_T(size_y,size_x);

// Converting 2D image to ID array
  if(!isHorz)
  {
      int lRow = 0;
      int lCol = 0;
      for (int row=roi.y+odd_y_offset;row< roi.y+size_y;row=row+2)
      {
          lCol = 0;
          for (int col=roi.x;col< roi.x+size_x;col++)
          {
              lInputRoi->data[lRow *size_x + lCol] = (real_T)img.at<uchar>(row,col);
              lCol++;
          }
          lRow++;
      }
  }
  else
  { 
      int lRow = 0;
      int lCol = 0;
      for (int col=roi.x+odd_x_offset;col< roi.x+size_x;col=col+2)
      {
          lRow = 0;
          for (int row=roi.y;row< roi.y+size_y;row++)
          {
              lInputRoi->data[lCol *size_y + lRow] = (real_T)img.at<uchar>(row,col);
              lRow++;
          }
          lCol++;
          size_x = roi.height;
          size_y = roi.width;
      }
  }

// initializing matlab generated function
  mat3_initialize();

  double lStatus = 0;

  double lslope_deg = 0.0;
  double lfreqval = 0.0;
  double lsfrvalue = 0.0;

  mat3(lValueF, lDesiredValue, io, del, lInputRoi, &lStatus, &lslope_deg, &lfreqval, &lsfrvalue);

注意:1)img -> 是输入图像数据。2) roi -> 是一个结构类型的对象,它有两个 int 变量(x 和 y) 3) MV2010 应用程序是一个使用“共享 DLL 中的 MFC”的应用程序 4) 我看过一个关于如何集成 Mathlab 的教程在 Microsoft Visual Studio 中生成 dll。但是,本教程没有出现任何错误。http://www.mathworks.com/videos/integrate-code-into-visual-studio-77402.html

感谢您提前提供任何帮助。

4

0 回答 0