Render.ru
Поддержать

Как подключать сторонние библиотеки?

Почемучкин

Активный участник
Рейтинг
7
Здравствуйте, Знатоки!

Подскажите, пожалуйста, как правильно подключать и использовать сторонние библиотеки.
При попытке загрузить библиотеку:
dotnet.loadAssembly "C:\\Program Files\\Autodesk\\3ds Max 2011\\Scripts\\Importer\\K4os.Compression.LZ4.dll"
получаю следующую ошибку:
-- Error occurred during fileIn in <File:C:\Program Files\Autodesk\3ds Max 2011\Scripts\Importer\Importer.ms>
>> MAXScript FileIn Exception: -- Runtime error: dotNet runtime exception: Invalid directory on URL. <<
Как корректно подключить стороннюю библиотеку декодирования LZ4?
И, самое главное, как выполнить строку декодирования (взято из опенсорса программы, написанной на C#):
LZ4Codec.Decode(input, output);
Буду благодарен, если подскажите, как это сделать на примере.
Также буду весьма благодарен, если поделитесь ссылками на темы (желательно на русском), где можно об этом всем почитать.

PS: Может быть где-нибудь уже существует готовая функция декодирования LZ4 на максскрипте?

Спасибо за помощь.

LastJedi

Знаток
Рейтинг
27
Самое банальное, что стоит проверить: убедиться, что путь к файлу dll правильный, что доступ к файлу есть, и что разрядность файла dll и 3ds Max совпадает (т.е. и то и другое 64-бит)

Почемучкин

Активный участник
Рейтинг
7
LastJediубедиться, что путь к файлу dll правильный
Проверил. Путь верный.
LastJediчто доступ к файлу есть
Как понять, что доступ к файлу есть? Как это проверить?
LastJediчто разрядность файла dll и 3ds Max совпадает (т.е. и то и другое 64-бит)
Проверил. 3ds Max 2011 64-битный, а вот библиотека, как я понял 32-битная (в заголовке PE..L, что, как я нагуглил, означает 32-битную разрядность). Т.е. запустить 32-битную библиотеку на 64-битном Максе не выйдет?

LastJedi

Знаток
Рейтинг
27
ПочемучкинТ.е. запустить 32-битную библиотеку на 64-битном Максе не выйдет?
Да, разрядность библиотеки и приложения должны совпадать.

Почемучкин

Активный участник
Рейтинг
7
Хорошо, поищу 64-битную версию.

А как в максскрипте выполнить строку декодирования (взято из опенсорса программы, написанной на C#):
LZ4Codec.Decode(input, output);

Что-то вроде этого или как:
fn LZ4Decode bs input output =
(
ft = dotnetobject "K4os.Compression.LZ4.LZ4Codec.Decode" input output
ft.packedvalue
)

Почемучкин

Активный участник
Рейтинг
7
Ребята, я извиняюсь, но не могли бы вы написать пример загрузки какой-нибудь стандартной виндовской 64-битной библиотеки?
Я уже совсем запутался. Сколько не пытался, постоянно ошибки.
Я ранее никогда не сталкивался с загрузкой библиотек в максскрипте, поэтому даже не понимаю, правильно ли я вообще это пытаюсь сделать.
Может где-нибудь есть об этом хорошие руководства на русском?

Владислав Бодюл

Активный участник
Рейтинг
15
Если библиотека правильная то [ICODE]dotnet.loadAssembly[/ICODE] вернёт [ICODE]dotNetObject:System.Reflection.RuntimeAssembly[/ICODE] что говорит о том что библиотека загрузилась. Если ошибка, то наверно ничего не сделать, кроме как искать подходящую библиотеку. А если библиотека загрузилась, то нужно смотреть документацию, в каком пространстве имён находится нужный класс, чтобы потом путь к классу передать в [ICODE]dotnetclass[/ICODE] или [ICODE]dotnetobject[/ICODE].

Стандартные .net библиотеки уже загружены. Убедиться в этом можно выполнив например [ICODE]dotnetclass "System.String"[/ICODE] вернёт класс, а если класса нет, то [ICODE]undefined[/ICODE].