Что нового

Компилятор не находит подключаемые библиотеки

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
на картинке схема расположения папок(дизайнер с меня еще тот, но думаю что понятно :smile: )
в исходнике, который компилируется указаны пути к библиотекам
Код:
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <WinAPI.au3>
#include <StaticConstants.au3>
#include <GuiButton.au3>
#include <EditConstants.au3>
#include <Array.au3>
#include <..\udf\Icons.au3>
#include <..\udf\MNOBJST.au3>
#include <..\udf\FFSearch.au3>
#include <..\udf\7ZipEx.au3>
у меня работает.
я не удалял стандартно AutoIT с компа, делал чистку реестра спец.прогой. то есть удалил все записи в реестре где встречается слово autoit. переместил папку языка из Program Files(x86)
перезагрузил комп.
компиляция работает.
скинул папку с проектом на другой комп(знакомому) у него выдает ошибку компиляции.
удалил по одной точке в пути к моим библиотекам - было <..\>, стало <.\>
компиляция прошла успешно.
а вот у меня путь с одной точкой выдает ошибку при компиляции - невозможно открыть файл
что за непонятка?
 

Вложения

  • str.jpg
    str.jpg
    62 КБ · Просмотры: 19

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
Если скрипт находится в одной папке с UDF, то достаточно просто имени в двойных кавычках
Код:
#include "MNOBJST.au3"



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

А если в одном уровне с папкой, содержащей UDF, то с точкой или без, но не с двумя
Код:
#include ".\udf\MNOBJST.au3"
; или так
#include "udf\MNOBJST.au3"
 
Автор
joiner

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
вот именно что библиотеки в одной папке, а скрипт в другой. но эти папки на одном уровне в общей папке


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

плюс к этому должна сработать функция FileInstall
там тот же косяк с точками в указании пути к файлу
задача - "выйти" из своей папки на уровень вверх и зайти в другую папку "за файлом"
не возможность использовать переменные в этой функции просто "убивает" :smile:
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
joiner
"выйти" из своей папки на уровень вверх и зайти в другую папку
Если у вас скрипт находится в папке UDF, то получается, что вы поднимаетесь на уровень вверх и заходите в ту же самую папку UDF. Так зачем "идти наверх", если вы уже "там, где надо"? ;)
 
Автор
joiner

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
нет, скрипт в другой папке. пусть это будет папка Х
папка Х и папка UDF находятся на одном уровне
в папке Х - исходник
в папке UDF - библиотеки.
исходник компилируется в папке Х
InnI, извини, или я тебя не понимаю или мы друг друга :smile:
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
Так, давайте по порядку.
Вы используете символы "<>" для указания пути к UDF. Следовательно хотите искать от папки Include. Судя по справке, aut2exe ищет папку Include на уровень выше себя (..\Include). Значит MNOBJST.au3 он будет искать здесь: "Aut2Exe\..\Include\..\udf\MNOBJST.au3" и не найдёт. Дальше "полезет" в реестр, но там тоже ничего. После начнёт искать от папки скрипта: "X\..\udf\MNOBJST.au3" и найдёт.
Следовательно, чтобы всё это работало с "одной точкой", нужно либо иметь папку UDF в папке Include, либо путь в реестре, либо папку UDF в каталоге скрипта.

Попробуйте относительные пути указать в двойных кавычках, тогда поиск будет в обратную сторону, и, возможно, проблемы исчезнут.
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
Зачем вообще разделили <> и "" при include, не могу понять, это не удобно, 2 синтаксиса к одной и той же команды.
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
inververs
Можно иметь две UDF с одинаковым именем - одну в Include (стандартную) и вторую в папке скрипта (переделанную). И простым изменением ограничивающих символов подключать одну либо другую. Но в этом случае нужно быть ОЧЕНЬ внимательным :smile:
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
:smile: ну я так не делал. Не переделывал стандартные.
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
inververs
Не переделывал стандартные
Зато другие переделывают. Та же Excel.au3 ;) Старую кладём в папку скрипта и обрамляем "" для работы с готовыми скриптами. Ну а новые скрипты пишем уже через <> с использованием новых функций. Но это тоже всего лишь "оправдание" необходимости разделения :smile:
 
Автор
joiner

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
короче, перекинул свои библиотеки в папку "Проект\UDF\AutoIt3\Include\UDF"
нормально стало
в скрипте указываю
Код:
#include <udf\MNOBJST.au3>

все работает.
осталось последняя проблема с функцией FileInstall
копировать файл в папку с исходником не вариант, так как таких папок с исходниками может быть много
как указать путь к файлу?
структура папок та же
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
joiner
как указать путь к файлу?
Опять же, судя по справке, данный путь определяется относительно скрипта. Следовательно, создайте заранее какую-нибудь папку Files и описывайте относительно скрипта путь к ней. Естественно, вы должны заранее знать, где будет находиться скрипт в иерархии папок.
 
Автор
joiner

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
понятно.
короче, проще копировать файл в папку компиляции. пока буду так делать
ребята, спасибо за участие в обсуждении
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
joiner
Так у тебя проблема с fileinstall, и путями к файлам, а не с include - с ними никогда не замечал каких либо трудностей, у самого есть такие include '..\..\Итп'
Еще есть неудобства с DllOpen,там уже приходится играться с FileChangeDir
 
Верх