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

  • Автор темы nush
  • Дата начала
Статус
Закрыто для дальнейших ответов.
N

nush

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


У меня есть 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а!?
 

Kmet

Well-Known Member
Java Team
25.05.2006
1 036
8
#2
Много буковок. А вот что за ошибка не написал.
Так не пробовал
(*TestFunc)(2, outA, outB, in1, in2);

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

nush

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

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

Kmet

Well-Known Member
Java Team
25.05.2006
1 036
8
#4
Если под ошибкой понимается эксептион, то скорее всего проблема в несоответсвии соглашений вызова
 
N

nush

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