我想围绕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
这是一个可以克服的限制吗? 任何帮助,赞赏, 感谢