Совместимость COM / .Net: префиксы tlbexp префиксируют конфликтующие имена с помощью namespace_, как обойти это? - PullRequest
1 голос
/ 25 августа 2011

Я хочу реализовать оболочку .Net вокруг Com Coclass (определенного в dll C ++), который имеет точно такое же имя и имя интерфейса, что и COM-объект, но внутри другого пространства имен. Когда я пытаюсь это сделать, я обнаруживаю, что tlbexp добавляет префикс к имени класса (экспортируемый тип становится namespace.namespace_classname). Это раздражает, потому что тогда файл TLB не может быть легко использован, например, в VBA.

Вот пример, чтобы прояснить ситуацию

Код на C ++ выглядит примерно так:

namespace CPP
{
    public interface IComObjectTest
    { ... }
    public class ComObjectTest : IComObjectTest
    { ... }
}

Код на C # выглядит примерно так:

namespace CS
{
    public interface IComObjectTest : CPP.IComObjectTest
    { 
         ...
    }

    public class ComObjectTest : CS.IComObjectTest
    {
         private CPP.ComObjectTest _test;
         public ComObjectTest(CPP.ComObjectTest test) { _test = test; }

         public CPP.ComObjectTest GetComObjectTest { get { return _test; } }

         ...
    }
}

Когда я компилирую проект C # и запускаю на нем tlbexp.exe. Я получаю следующие типы экспортируются:

CS.CS_ComObjectTest
CS.CS_IComObjectTest

пока я бы хотел увидеть:

CS.ComObjectTest
CS.IComObjectTest

Это ограничение, которое можно преодолеть? Любая помощь приветствуется, Спасибо

...