从c ++调用matlab dll:无法初始化库

时间:2013-08-29 13:48:24

标签: c++ visual-studio-2010 matlab sift matlab-compiler

我尝试使用演示代码来检测和匹配David Lowe的SIFT功能(lowe@cs.ubc.ca)

在我的代码中。所以我在Matlab中编译(.m)文件来生成DLL。这是Matlab中的命令代码:

           mcc -B csharedlib:SiftMatch match.m sift.m -v

但是,当我在我的C ++代码中使用DLL时(在VS2010下),存在一个问题:

              SiftMatchInitialize();
   This function returned false. I could not initialize the library.

并且调试显示:

    bool MW_CALL_CONV SiftMatchInitializeWithHandlers(
    mclOutputHandlerFcn error_handler,
    mclOutputHandlerFcn print_handler)
{
    int bResult = 0;
  if (_mcr_inst != NULL)
    return true;
  if (!mclmcrInitialize())
    return false;
  if (!GetModuleFileName(GetModuleHandle("SiftMatch"), path_to_dll, _MAX_PATH))
    return false;
    {
        mclCtfStream ctfStream = 
            mclGetEmbeddedCtfStream(path_to_dll);
        if (ctfStream) {
            bResult = mclInitializeComponentInstanceEmbedded(   &_mcr_inst,
                                                                error_handler, 
                                                                print_handler,
                                                                ctfStream);
            mclDestroyStream(ctfStream);
        } else {
            bResult = 0;
        }
    }  
    if (!bResult)
    return false;
  return true;
}

在此函数中,ctfStream为NULL,bResult等于0。 那么,问题是什么?

1 个答案:

答案 0 :(得分:1)

不要将MATLAB Compiler生成的.c / .cpp文件包含到项目中。只需要头文件和.lib文件。