Я хочу реализовать оболочку .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
Это ограничение, которое можно преодолеть?
Любая помощь приветствуется,
Спасибо