В мире разработки программного обеспечения часто встречаются ситуации, когда даже, казалось бы, надежные источники информации могут содержать неточности. Случай с передачей массивов в COM-объектах для VBScript и Visual Basic - яркий тому пример. Информация, которую вы обнаружили на сайте devguy.com, действительно содержит ряд неточностей, и ваши наблюдения совершенно верны.
Начнем с того, что VBScript действительно поддерживает только массивы (SAFEARRAY), содержащие элементы типа VARIANT. Это верно как для входных, так и для выходных параметров. Однако дальнейшее утверждение о том, что VBScript передает входящие VARIANT как VT_BYREF|VT_VARIANT, а указатель pvarVal указывает на VARIANT типа VT_BYREF|VT_VARIANT|VT_ARRAY, является некорректным.
В реальности, как вы правильно заметили, Visual Basic (и VBScript тоже) передает SAFEARRAY в поле parray, а не pparray. Это фундаментальное различие, которое имеет важное значение при работе с COM-объектами и массивами.
Более того, утверждение о том, что VT_BYREF|VT_VARIANT может указывать на VT_BYREF|VT_VARIANT, противоречит спецификациям Automation. Согласно правилам COM Automation, такая конструкция недопустима. Это ограничение существует для обеспечения совместимости и предсказуемости поведения COM-объектов при взаимодействии с различными языками программирования и средами выполнения.
Что касается элементов массива, то они действительно имеют тип VT_VARIANT, но не являются BYREF. Это важное уточнение, так как оно влияет на то, как данные передаются и обрабатываются внутри массива.
Ваш опыт показывает, насколько важно критически оценивать информацию, даже если она comes from seemingly reputable sources. В мире программирования, особенно когда речь идет о таких сложных темах, как взаимодействие с COM-объектами, всегда лучше проверять информацию на практике и обращаться к официальной документации.
Эта ситуация также подчеркивает важность понимания низкоуровневых деталей работы с COM и различий между языками программирования при взаимодействии с COM-объектами. VBScript и Visual Basic, хотя и похожи во многих аспектах, могут иметь тонкие различия в реализации, которые становятся критически важными при разработке сложных приложений или при оптимизации производительности.
В заключение стоит отметить, что ваш опыт и наблюдения вносят ценный вклад в понимание этой темы. Такие практические знания особенно ценны для сообщества разработчиков, так как они помогают избежать потенциальных проблем и улучшают общее понимание работы с COM-объектами в различных средах программирования.