COM / .Net互操作性:tlbexp为带有'namespace_'的冲突名称添加前缀,如何解决?

时间:2011-08-25 16:22:38

标签: c# com interop

我想围绕Com Coclass(在C ++ dll中定义)实现一个.Net包装器,它具有与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

这是一个可以克服的限制吗? 任何帮助,赞赏, 感谢

0 个答案:

没有答案