Импортировать библиотеку со специальным символом в IronPython

Я получил библиотеку C ++. NET от коллеги с именем типа "my-name.dll". Импорт в IronPython невозможен, так как "from my-name import *" недействителен.

Если я переименую библиотеку в myname.dll, я получаю сообщение об отсутствии манифеста сборки (HRESULT: 0x80131018). Теперь я не уверен, что это проблема неправильного имени сопровождающего файла "my-name.lib" (переименование не помогло) или что-то не так.

Я не эксперт в .NET, но когда я тестировал DLL VB.NET, которую я создал сам (с собственным именем), все работало хорошо.

Любые идеи?


person Michael Hecht    schedule 04.06.2013    source источник
comment
Тем временем я видел, что в очень длинном сообщении об ошибке из строки: clr.AddReferenceToFile (my-name.dll) также есть что-то вроде: 'Файл mytest.py, строка 3, в ‹module› IOError: System .IO.IOException: не удалось добавить ссылку на сборку my-name.dll ', так что опять что-то со сборкой ?!   -  person Michael Hecht    schedule 04.06.2013
comment
Теперь (через день) я получил от коллеги новую версию dll без спецсимволов. Получил: * .dll, * .dll.intermediate.manifest, * .exp и * .lib. К сожалению, я снова получил: файл ... или зависимость не найдена. ... ожидается манифест сборки ... (он написан на немецком языке, но это должен быть правильный перевод)   -  person Michael Hecht    schedule 05.06.2013
comment
Кажется, все связано с проблемой генерации управляемых и неуправляемых dll. Я реализовал пример (на моем компьютере в VC ++ 2010), как описано здесь: msdn.microsoft.com/en-us/library/ms235638%28v=vs.80%29.aspx, и это сработало. Я также расширил его на класс, и все было в порядке. Теперь я попросил своего коллегу сделать то же самое на своем компьютере (используя VC ++ 2008) и прислал мне dll. Я сообщу вам, удастся мне или нет.   -  person Michael Hecht    schedule 05.06.2013
comment
Хорошо, моему коллеге наконец удалось адаптировать свою конфигурацию, как описано в ссылке msdn. Тем не менее, отладочная версия dll не была применима, потому что необходимый Microsoft.VC90.DebugCRT был недоступен даже с распространяемым пакетом MS для VC ++. NET 2008. Версия библиотеки Release, наконец, сделала это.   -  person Michael Hecht    schedule 08.06.2013


Ответы (1)


Вероятно, проблема в сборке; вызов clr.AddReference('my-name.dll') должен работать нормально. Одна из возможностей заключается в том, что на вашем компьютере отсутствуют соответствующие файлы времени выполнения VC ++. Попробуйте создать небольшое приложение VB / C # и загрузить оттуда DLL.

Также убедитесь, что не заблокирована.

person Jeff Hardy    schedule 04.06.2013
comment
Хорошо, два замечания: 1. Если я импортирую my-name.dll, как мне загружать классы? из класса импорта моего имени? my-name не является действительным именем Python, не так ли? 2. Сначала я попробовал использовать программу VB (см. Выше), и все было в порядке. Так что в основном я могу использовать dll. Я перешел по вашей ссылке и думаю, что dll не заблокирована. - person Michael Hecht; 05.06.2013
comment
После ссылки на DLL вы импортируете имена из пространства имен, используемого в DLL. Имена пространств имен .NET также всегда являются допустимыми именами Python. - person Jeff Hardy; 05.06.2013
comment
Хорошо, тем временем я понял (надеюсь, что да), что если я сделаю свою ссылку как clr.AddReference ('my-name.dll'), а затем из панели импорта foo, что foo НЕ является именем dll, а определенным пространством имен внутри dll. Если пространство имен недоступно, мне нужно реализовать только такой оператор, как: панель импорта - person Michael Hecht; 08.06.2013