Я пытаюсь использовать демонстрационный код для обнаружения и сопоставления функций SIFT Дэвида Лоу ([email protected])
в моем коде. Поэтому я скомпилировал (.m) файл в Matlab для генерации DLL. Вот код команды в Matlab:
mcc -B csharedlib:SiftMatch match.m sift.m -v
Однако, когда я использую DLL в своем коде C ++ (под 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.
Так в чем проблема?
Не включайте файлы .c / .cpp, сгенерированные компилятором MATLAB, в ваш проект. Необходим только заголовочный файл и файл .lib.
Других решений пока нет …