• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

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

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

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а!?
 

Kmet

Well-known member
25.05.2006
904
8
BIT
0
Много буковок. А вот что за ошибка не написал.
Так не пробовал
(*TestFunc)(2, outA, outB, in1, in2);

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

nush

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

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

Kmet

Well-known member
25.05.2006
904
8
BIT
0
Если под ошибкой понимается эксептион, то скорее всего проблема в несоответсвии соглашений вызова
 
N

nush

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

Обучение наступательной кибербезопасности в игровой форме. Начать игру!