У меня проблемы с библиотекой COM, которую я пытаюсь использовать. Я получаю ArgumentException, когда вызываю определенный метод и передаю его null
. Это происходит со мной как в проекте C #, так и в проекте VB.NET (я вызываю метод, используя Nothing
), где я добавил ссылку на библиотеку из списка «COM» в Visual Studio 2008. Когда я вызываю этот же метод в Python , передав None
, метод работает, как и ожидалось, без ошибок. Насколько я понимаю, Python взаимодействует с библиотекой COM через DCOM (и у меня есть только самое смутное представление о том, что это значит), в то время как я мог бы использовать библиотеку COM напрямую, когда ссылаюсь на нее в своих проектах на C # / VB.NET. Может ли что-то происходить, что приведет к тому, что параметр, который я передаю, облажается, прежде чем он попадет в библиотеку COM? Я не уверен, что здесь происходит. Недавно я обновил библиотеку COM до более новой версии, поэтому мне стало интересно, не возникло ли где-то конфликта версий, что вызвало исключение. Я удалил все ссылки на библиотеку COM из своих проектов на C # и VB.NET, удалил все каталоги bin
и obj
и снова добавил ссылку. Это привело к тому, что файл Interop.MyCOMLibrary.dll, который отображается в obj
, имеет сегодняшнюю дату вместо более старой, которую я видел.
Единственная документация, которую я имею для библиотеки COM, описывает метод следующим образом:
Public Function AddItem( _
ByVal ItemData As Variant _
) As Object
Я сейчас пытаюсь найти проблемы, связанные с параметрами Variant
.
Редактировать: , поэтому, пока Type.Missing
и другие решения работают для того, чтобы я без ошибок завершил этот вызов метода, попытка прочитать определенные строковые свойства возвращаемого элемента из этого метода приводит к:
System.Runtime.InteropServices.COMException: элемент не существует.
Это еще один пример, когда он работал в Python, но выбрасывал исключение в C #, поэтому я предполагаю, что у DCOM-против-COM странность. Или, возможно, это проблема с многопоточностью, поскольку я использую MSTest для тестирования.