我尝试使用演示代码来检测和匹配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。 那么,问题是什么?
答案 0 :(得分:1)
不要将MATLAB Compiler生成的.c / .cpp文件包含到项目中。只需要头文件和.lib文件。