我有一个用C#编写的基类,它实现了在IDL库中定义的接口。我有一个C++类来管理这个类的单个实例。我也有一个C#项目需要使用这个类[实例(通过C++项目获得)]。我想将我的基类实现的COM接口转换回我的C#基类。将COM对象转换为C#/ .NET类时遇到问题
但是,当我将从C++比例获得的通用对象转换到我的C#基类中时,我收到一个错误。当我将它投射到衍生界面时,没有问题。
下面是我的问题的类似示例。在CSDriver的NETBaseInstance函数中从不评估两个if范围。 NETBase是唯一实现COMInterface的类。所以,我知道这个值是一个NETBase,因为如果对COMInterface的范围进行评估。
public class NETBase : COMInterface{ ... }
public class CSDriver{
private NETBase m_NETBaseInstance;
...
public object NETBaseInstance{
set{
COMInterface test;
if(value is COMInterface){
// This is evaluated.
test = value as COMInterface;
}
if(value is NETBase){
// This is not evaluated.
m_NETBaseInstance = value as NETBase;
}
if(test is NETBase){
// This is not evaluated.
m_NETBaseInstance = test as NETBase;
}
}
}
}
将此COM对象成功投射到C#对象的过程是什么?难道我做错了什么?
非常感谢您提供任何答案。
是的,你是对的;这是一个单身人士。我曾想过在NETBase中管理单例,并按照你的建议来做同样的事情,但我的团队并不想要一个与其他人不同的类。所以,我打算自己打包NETBase(而其他类有一个包装和类本身)。谢谢你的答案。这真的很有帮助。 – swtdrgn