C# COM/.Net互操作性:tlbexp前缀与';名称空间';,如何解决? 我想在Com Coclass(在C++ DLL中定义)中实现.NET包装器,它与COM对象具有完全相同的名称和接口名称,但在不同的命名空间内。当我尝试这样做时,我发现tlbexp在类的名称中添加了一个前缀(导出的类型成为namespace.namespace\u classname)。这很烦人,因为tlb文件不能在VBA中轻松使用
下面是一个让事情更清楚的例子 < C++代码有点像: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 { ...
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
这是一个可以克服的限制吗?
感谢您的帮助,
谢谢