Что нового

[Использование dll] Создание dll и использование ее в autoit. Передача параметра

RomchegChe

Новичок
Сообщения
37
Репутация
1
Здравствуйте, Уважаемые!
Возникала необходимость часть кода вынести в dll для ускорения. Создаю простейшую функцию и использую ее
На си
Код:
extern  "C" __declspec(dllexport) int My1(int b)
        {
                int a = b;
                return a;
    }
на autoit
Код:
$a = DllCall ( "3.dll", "Int", "My1", "Int", 3 )
MsgBox(0,'',@error)
MsgBox(0,'',$a[0])

Вызов зависает и операционка закрывает процесс, а вот такой вызов без параметра проходит и ошибок нет
Код:
$a = DllCall ( "3.dll", "Int", "My1" )
MsgBox(0,'',@error)
MsgBox(0,'',$a[0])

Почему не получается передать параметр?
 

Viktor1703

AutoIT Гуру
Сообщения
1,535
Репутация
413
Наверное потому что у Вашей dll соглашение CDECL, тогда вызов должен выглядеть так

Код:
$a = DllCall ( "3.dll", "int:cdecl", "My1", "int", 3 )
MsgBox(0,'',@error)
MsgBox(0,'',$a[0])


переделайте соглашение, должно заработать

Код:
extern  "C" __stdcall(dllexport) int My1(int b)
{
        int a = b;
        return a;
}

и

Код:
$a = DllCall ( "3.dll", "int", "My1", "int", 3 )
MsgBox(0,'',@error)
MsgBox(0,'',$a[0])
 

sims

Осваивающий
Сообщения
184
Репутация
24
Согласен. Проблема из-за соглашения вызова.
В функции dll оно cdecl, а она из скрипта вызывается как stdcall.
 

AZJIO

Меценат
Меценат
Сообщения
2,874
Репутация
1,194
http://autoit-script.ru/index.php/topic,13274.msg84820.html#msg84820
 
Автор
R

RomchegChe

Новичок
Сообщения
37
Репутация
1
Спасибо! Все получилось, почитаю еще об использовании соглашений
 
Верх