использование своей .dll

Тема в разделе "MS Visual C++", создана пользователем nush, 30 янв 2007.

Статус темы:
Закрыта.
  1. nush

    nush Гость

    Дорогие добрые волшебники программисты,
    подскажите плз как сделать


    У меня есть libmatrixp.dll, но не могу вызывать из нее нужную функцию.
    Видимо что то не так к прототипом.

    В проекте пишу

    #include "libmatrixp.h"
    #include <windows.h>
    #include "mclcppclass.h"

    typedef void (* cfunc)(int nargout, mwArray& A, mwArray& B, const mwArray& filename1, const mwArray& filename2);

    int _tmain(int argc, _TCHAR* argv[])
    {

    cfunc TestFunc;
    HINSTANCE hLib = LoadLibrary("libmatrixp.dll");
    const char* str1[] = {"2mcm.pdb"};
    const char* str2[] = {"2AYH.pdb"};
    const mwArray in1(1,str1);
    const mwArray in2(1,str2);
    mwArray outA;
    mwArray outB;

    if (hLib != NULL)
    {
    TestFunc = (cfunc)GetProcAddress(hLib,"?mainpart@@YAXHAAVmwArray@@0ABV1@1@Z");
    if (NULL != TestFunc)
    {
    (TestFunc)(2, outA, outB, in1, in2); ??????!!!!!!! сдесь выдается ошибка
    //int f =out.out2.NumberOfElements();
    // std::cout <<f << std::endl;
    }
    FreeLibrary((HMODULE)hLib);
    }
    }

    В libmatrixp.h моя функция mainpart имеет такой прототип extern LIB_libmatrixp_CPP_API void MW_CALL_CONV mainpart(int nargout
    , mwArray& A
    , mwArray& matchA
    , const mwArray& filename1
    , const mwArray& filename2);

    В проекте проделывала все возможные вариации с включение в typedef
    LIB_libmatrixp_CPP_API и MW_CALL_CONV, но на строчке (TestFunc)(2, outA, outB, in1, in2); всегда выдается ошибка.
    Библиотеку находит и функцию тоже(по крайней мере возвращает не null). Название ?mainpart@@YAXHAAVmwArray@@0ABV1@1@Z нашла в libmatrixp.dll.


    Не могу понять где истиyа!?
     
  2. Kmet

    Kmet Well-Known Member

    Регистрация:
    25 май 2006
    Сообщения:
    1.017
    Симпатии:
    1
    Много буковок. А вот что за ошибка не написал.
    Так не пробовал
    (*TestFunc)(2, outA, outB, in1, in2);

    И удобно использовать такие имена для экспортируемых функций "?mainpart@@YAXHAAVmwArray@@0ABV1@1@Z" ??
     
  3. nush

    nush Гость

    Ошибка вылетает на вызове функции, не правильно обрасчение.
    и так пробовала (*TestFunc)(2, outA, outB, in1, in2); результат один

    функцию вообще называю mainpart в матлабе, но когда делается длл, матлаб сам ее так страшно называет "?mainpart@@YAXHAAVmwArray@@0ABV1@1@Z" ??
     
  4. Kmet

    Kmet Well-Known Member

    Регистрация:
    25 май 2006
    Сообщения:
    1.017
    Симпатии:
    1
    Если под ошибкой понимается эксептион, то скорее всего проблема в несоответсвии соглашений вызова
     
  5. nush

    nush Гость

    несоответсвии соглашений вызова -тоже думаю что так и есть, но дело в том что непонятно где можно впринцыпе поискать как правильно вызывать, то что есть в .h неподходит ((, а еще обычно есть какой то файл где это нужно смотреть, но когда матлаб делает библиотеку он этот файл не оставляет, а в доли секунд стирает. Может подскажите где и что можно еще посмотреть
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей