Render.ru

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

Почемучкин

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

Подскажите, пожалуйста, как правильно подключать и использовать сторонние библиотеки.
При попытке загрузить библиотеку:
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
#2
Самое банальное, что стоит проверить: убедиться, что путь к файлу dll правильный, что доступ к файлу есть, и что разрядность файла dll и 3ds Max совпадает (т.е. и то и другое 64-бит)
 

Почемучкин

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

Почемучкин

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

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

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

Почемучкин

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

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

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

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