Место чтения нарушения доступа при доступе к методу dll

Я использую следующий код для доступа к методу в файле DLL, и я получаю Access violation reading location 0x41100000 при вызове метода из метода dll.

Метод, к которому я пытаюсь получить доступ, имеет следующий прототип

 int dstoch(float,float,float,float,float,float,float,float,float);

Это мой код

typedef int (*LPMyfunct)(float,float,float,float,float,float,float,float,float);
HINSTANCE hDLL = NULL;
LPMyfunct lpdstoch = NULL;

hDLL = LoadLibrary("c:\\myfile.dll");

if(hDLL!=NULL)
{
std::cout << "Library loaded \n";
lpdstoch = (LPMyfunct)GetProcAddress((HMODULE)hDLL, "dstoch");

int res = 0;
if(lpdstoch != NULL)
{
try
{
res = lpdstoch(1.1,2.2,3.3,4.4,5.4,6.4,7.4,8.8,9.9); //Gives the error
}
catch (std::exception &e)
{
std::cout << e.what();
}
}
}

Любые предложения, какие причины могут быть? Есть ли вероятность ошибки в файле dll?
Есть ли способ, которым я мог прочитать параметры файла DLL? Отключите его, чтобы проверить, правильно ли я получаю типы параметров? Проверка зависимости показывает, что метод существует, но я не могу определить типы аргументов?

Обновить:

Я все еще получаю ошибку

Исключение первого шанса в 0x0040356c в test.exe: 0xC0000005:
Положение о нарушении прав доступа 0x42080000. Необработанное исключение при
0x0040356c в Cexperiment.exe: 0xC0000005: запись о нарушении прав доступа
местоположение 0x42080000.

Я также считаю, что эта проблема не может быть связана с соглашением о вызовах. Причина, по которой я считаю, заключается в том, что я не получаю сообщение об ошибке от VS2010 о том, что соглашение о вызовах может быть причиной. Я получил это сообщение, когда пытался использовать какое-то другое длл. Таким образом, если соглашение о вызове или параметры не являются проблемой (вы получаете одно и то же сообщение соглашения о вызове, если параметры отличаются), тогда это может быть что-то другое. Любые предложения о том, что я мог бы попробовать?

0

Решение

Вам нужно проверить соглашение о вызовах функции dll и объявить LPMyfunct введите соответственно. Возможные значения для соглашений о вызовах: stdcall, cdecl, pascal,

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]