Matlab コーダーを使用して、Mathlab .m ファイルから dll ファイルを作成しました。matlab では、matlab コードはエラーなしで正常に実行され、DLL の作成は成功しました。MV2010 は正常にコンパイルおよび実行されます。ただし、ソフトウェアが Visual Studio でこの DLL から任意の関数を呼び出すと、メモリ ロケーションで「未処理の例外」が発生し、別のメモリ ロケーションで「アクセス違反読み取りロケーション」が発生します。
作成されたdllは、欠落している別のdllに依存していると思いました。そこで、依存関係の確認には依存関係 Walker を使用しました。ただし、Dependency Walker では、欠落している依存関係は示されませんでした。
Matlab 関数は 5 つの入力変数 (4 つは double として、1 つは double の 1D 配列として) を取り、4 つの double 値を返します。そのため、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 -> は、2 つの int 変数 (x と y) を持つ struct 型のオブジェクトです。 3) MV2010 アプリケーションは、「共有 DLL 内の MFC」を使用するアプリケーションです。 4) Mathlab を統合する方法に関するチュートリアルを見てきました。 Microsoft Visual studio で生成された dll。ただし、チュートリアルではエラーは発生しません。http://www.mathworks.com/videos/integrate-code-into-visual-studio-77402.html
事前にご協力いただきありがとうございます。