C# COM/.Net互操作性:tlbexp前缀与';名称空间';,如何解决? 我想在Com Coclass(在C++ DLL中定义)中实现.NET包装器,它与COM对象具有完全相同的名称和接口名称,但在不同的命名空间内。当我尝试这样做时,我发现tlbexp在类的名称中添加了一个前缀(导出的类型成为namespace.namespace\u classname)。这很烦人,因为tlb文件不能在VBA中轻松使用

C# COM/.Net互操作性:tlbexp前缀与';名称空间';,如何解决? 我想在Com Coclass(在C++ DLL中定义)中实现.NET包装器,它与COM对象具有完全相同的名称和接口名称,但在不同的命名空间内。当我尝试这样做时,我发现tlbexp在类的名称中添加了一个前缀(导出的类型成为namespace.namespace\u classname)。这很烦人,因为tlb文件不能在VBA中轻松使用,c#,com,interop,C#,Com,Interop,下面是一个让事情更清楚的例子 < C++代码有点像: namespace CPP { public interface IComObjectTest { ... } public class ComObjectTest : IComObjectTest { ... } } namespace CS { public interface IComObjectTest : CPP.IComObjectTest { ...

下面是一个让事情更清楚的例子

< C++代码有点像:

namespace CPP
{
    public interface IComObjectTest
    { ... }
    public class ComObjectTest : IComObjectTest
    { ... }
}
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代码类似于:

namespace CPP
{
    public interface IComObjectTest
    { ... }
    public class ComObjectTest : IComObjectTest
    { ... }
}
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
这是一个可以克服的限制吗? 感谢您的帮助, 谢谢