Я хочу только ответить на дополнительные вопросы Тони.
Если вы хотите создать COM, который может быть доступен из VBScript / JScript или из старого «классического» ASP, вам нужно реализовать IDispatch.
В Visual Basic 6 или в VBA MS Office можно использовать оба способа. Если вы добавите ссылку на ваш COM, то вы будете использовать «раннее связывание» (IUnknown или VTable). Если вы используете свой COM в VB6 или VBA с CreateObject («ProgIdName»), то вы будете использовать «с поздней привязкой».
Очень важно понимать, что сделать COM доступным из VB6 / VBA и т. Д. недостаточно просто реализовать интерфейс IUnknown. Вы должны создать и зарегистрировать библиотеку типов с атрибутом oleautomation
. Чтобы сделать это, вы можете использовать в интерфейсе вашего COM только oleautomation
совместимые типы данных (см. http://msdn.microsoft.com/en-us/library/aa367129%28VS.85%29.aspx).. Для понимания библиотеки типов играют роль клиентской библиотеки маршалинга, поэтому она помогает клиентскому программному обеспечению. как VB6 / VBA для правильной отправки данных в качестве параметров на ваш COM. Не забывайте, что даже ваш COM будет сервером InProc, DLL, параметры не будут перенаправлены непосредственно в COM, но их нужно маршалировать. маршалинг копии данных будет создан в потоке, в котором запускается ваш COM.Это делает поток COM DLL безопасным с одной стороны, и ваш COM не потерпит крах, если поток, вызывающий ваш метод COM, будет завершен до того, как COM вернет значение. 1011 *
Возможно, мое объяснение маршалинга не простое, но просто важно не забудьте создать и зарегистрировать библиотеку типов, которую лучше сохранить как ресурс внутри COM.