Что нового

DllCall - не выгружается библитотека?

ultra_novice

Новичок
Сообщения
4
Репутация
0
День добрый!
Как-то обнаружил, что моя программа-поделка прям-таки захватывает себе все больше и больше места в файле подкачки, подозрение сразу пало на DllCall(), вызывал по имени файла (т.е. после вызова должно закрываться автоматически), сделал вызов через DllOpen() + последующий DllClose() - но не помогло... Если отключаешь блок вызова dll-ки, то все нормально. В чем может быть причина?

Ну, Win XP SP2 + autoit 3.3.8.1. Как-то так. Замена на последнюю версию - не помогло.
 
Автор
U

ultra_novice

Новичок
Сообщения
4
Репутация
0
То же моя личная поделка - было фортрановское приложение (расчет прямой и обратной геодезической задачи), переделал и скомпилировал как dll.
 

Prog

Продвинутый
Сообщения
581
Репутация
70
В этой DLL случайно не выделяется память (или другие ресурсы системы), которая не освобождается при завершении функции?
 
Автор
U

ultra_novice

Новичок
Сообщения
4
Репутация
0
Как бы вроде сугубо мат. расчет, приложение работало в командной строке (не стал переделывать начисто в AutoIt, так как польстился скоростью работы). Хотя спасибо за наводку, надо поискать в Fortrane какие-либо функции "приборки"... Как бы библиотеки две, надо выяснить обе или одна потребляет "подкачку"...


Добавлено:
Сообщение автоматически объединено:

Не, какой-либо связки Allocate-Dealocate в исходном, фортрановском коде нет. Остается попробовать другую ось, ну или тупо запускать-перезапускать программу... Ну, или библиотеку сменить.


Добавлено:
Сообщение автоматически объединено:

Вроде Autoit отрабатывает нормально, после каждого вызова dll-ки файл подкачки растет на 50-60кб, сама dll-ка под 400Кб, т.е. дело в самой dll... Чего-то там не так. Надо пробовать выход из функции подвигать по самой dll.
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
1. Как делается вызов из AutoIt?
2. Почему увеличивается файл подкачки, а не уменьшается объем доступной памяти?
 
Автор
U

ultra_novice

Новичок
Сообщения
4
Репутация
0
Память растет параллельно с файлом подкачки, 2 dll, 2 вызова к каждой, все в цикле нарастает, конечно.
Дело в dll, скорее всего, надо попробовать или другой компилятор, или другую ось.


Добавлено:
Сообщение автоматически объединено:

Как-то так вызываю:





$res_dll = DllCall("inverse3d.dll", "int:cdecl", "inverse3d_", "float*", $r, "ptr", DllStructGetPtr($i), _
"str", $station1, "ptr", DllStructGetPtr($str2), "ptr", DllStructGetPtr($str3), _
"ptr", DllStructGetPtr($j), "int", StringLen( $station1), "int", DllStructGetSize($str2))



r,i,str1,str2 туда, str3 обратно (често "скопипастил" откуда-то, вроде с Вашего английского аналога).

Явно чего-то в dll мной накосячено, почему то в одной пришлось вставить паузу (типа пустого небольшого цикла), т.к. выдавала неправильные данные.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
ultra_novice,
Предупреждение За нарушение правил форума (пункт В.11):
Любые отрывки AutoIt кода необходимо заключать в тег [autoit]
autoit.gif
(подробнее), а обычный код соответственно в тег [code]
code.gif
(подробнее). Также большие выдержки текста помещайте под тег [spoiler]
spoiler.gif
(подробнее), там где это поддерживается естественно. Как в случае с названием темы, также короткое и эргономичное сообщение привлекает больше внимания, и шансы на получение конкретного ответа увеличиваются.


С уважением, ваш Глобальный модератор.
 
Верх