Существует не один способ пошатнуть это. Например, забудьте сделать свой интерфейс и классы [ComVisible (true)]. Или забыть зарегистрировать COM-сервер, явно сделанный с помощью Regasm.exe/codebase/tlb. Или используя неправильную версию Regasm.exe, в 64-битной версии будут записаны неправильные ключи реестра.
Что более важно для CreateObject(), атрибут [ProgId] в вашем классе C# необходим, чтобы обеспечить точную замену сервера VB6. Если код клиента когда-либо использовал раннее связывание, важно, чтобы атрибут [Guid] на ваших интерфейсах и классах был точным совпадением с листами, используемыми сервером VB6. И, конечно же, методы и свойства должны точно соответствуют тем, которые используются сервером VB6, заказ также очень важен.
Лучший способ сравнить оранжевый с яблоком - использовать утилиту Oleview.exe. Запустите его из командной строки Visual Studio и используйте File + View Typelib. Сначала выберите свой сервер VB6. Скопируйте/вставьте IDL, который вы видите в текстовом файле, и сохраните его, поэтому вам не нужно делать это повторно.
Запустите tlbexp.exe на сборке C#, чтобы создать библиотеку типов для вашего сервера C#. Запустите Oleview.exe снова и выберите файл .tlb. Теперь вы можете сравнить IDL для своего сервера с сервером VB6. Убедитесь, что вы получаете точное совпадение с подсказками, методами и свойствами.
И последнее, но не в последнюю очередь, если клиентский код фактически использует Interaction.CreateObject(), то это приложение .NET. Это означает, что вам не следует создавать COM-совместимый COM-сервер вообще. Это должна быть обычная сборка .NET, просто добавьте ссылку на нее и напрямую используйте открытый класс.
Прошло некоторое время с тех пор, как я перепутал с VB6 и его поддержкой COM, но, возможно, это имеет какое-то отношение к таблице запущенных объектов, где зарегистрированы экземпляры общих программ? Попытайтесь это прочитать. http://stackoverflow.com/questions/11835617/understanding-the-running-object-table –
@ Shahar-Kashtan Я полностью ушел от этой концепции, пожалуйста, помогите мне, что я делаю. –