【发布时间】:2014-04-17 15:11:42
【问题描述】:
我是 COM 世界的新手,需要您的帮助。
在 C# 客户端中使用此 dll 时,我从 COM dll 中获得 InvalidCastException,该 dll 在 C++ 中实现。
以下是我正在尝试的场景。
IDL:
[
uuid(7DE8F308-32D8-4793-A1B1-311AB2EACABB),
version(1.0),
]
library TestLib
{
importlib("stdole2.tlb");
[
object,
uuid(3AEA031A-458D-4329-9062-C210FABD5EF6),
dual,
nonextensible,
pointer_default(unique)
]
interface IParent : IDispatch{
};
[
object,
uuid(7C809C51-CBAF-452C-825B-617365EB11C0),
dual,
nonextensible,
pointer_default(unique)
]
interface IChild : IParent{
};
[
object,
uuid(D5800994-9538-481E-8EE7-F4441542A091),
dual,
nonextensible,
pointer_default(unique)
]
interface IMain : IDispatch{
[id(1)] HRESULT GetObject([out,retval] IParent** pVal);
};
[
uuid(07068857-6AD3-4FEF-A83B-DA4B876FFD70)
]
coclass Parent
{
[default] interface IParent;
};
[
uuid(FC490ABD-E446-4426-B0BE-BF3D8144AA8C)
]
coclass Child
{
[default] interface IChild;
};
[
uuid(449731C4-9384-41F3-B954-813AD8FAFB08)
]
coclass Main
{
[default] interface IMain;
};
};
以下是我在 C# 客户端中调用的方法实现:
STDMETHODIMP CMain::GetObject(IParent** pVal)
{
IChild* child;
CoCreatInstance(CLSID_Child, NULL, CLSCTX_INPROC_SERVER, IID_IChild, (void**)&child);
*pVal = child;
return S_OK;
}
当我在将控制权返回给 C# 客户端时执行“return S_OK”后尝试调试时,我正面临 InvalidCastExcetion。
C# 客户端:
IMain main = new Main();
IParent parent = main.GetObject();
我没有得到真正的问题是什么!!??
其他细节: 使用 Windows 7 64 位、Visual Studio 2010 实现 COM 和 C# 客户端。 COM 实现是用 C++ 实现的。
【问题讨论】:
标签: c# visual-studio-2010 com