问题:
我必须通过COM-Wrapper使用应用程序(Aperture)的OLE自动化(在VB.NET中)。
目前,我关闭了选项strict,并且这样做(使用后期绑定):
Dim m_Aperture As Object = CreateObject("Aperture.Application")
Dim m_Project As Object = m_Aperture.Project
你看到问题,一切都是对象,没有智能感知等。
非常糟糕。
因为我想让intellisense和编译时检查工作,我试图自动创建这样的COM包装器:
"C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\TlbImp.exe" OEAPP.TLB /out:Aperture.dll
到目前为止工作得非常出色,它创建了包装器,我可以使用intellisense(返回类型都是动态的类型)。
所以我尝试重写上面的示例代码(现在在C#中):
首次尝试是:
Aperture.OEAppClass app = new Aperture.OEAppClass();
但是我收到了这个编译错误:
Interop-Type Aperture.OEAppClass cannot be embedded. Use interface instead.
所以我试图通过界面来做到这一点:
Aperture.OEApp Ap = (Aperture.OEApp)Microsoft.VisualBasic.Interaction.CreateObject("Aperture.Application");
这让我在运行时遇到异常
InvalidCastException
"System.__ComObject" cannot be converted into interface type "Aperture.OEApp".
0x80010105 (RPC_E_SERVERFAULT)).
所以我尝试使用
找出接口类型dynamic Ap2 = Microsoft.VisualBasic.Interaction.CreateObject("Aperture.Application");
和对象检查员。
我发现界面实际上是Aperture._IOEApp类型。 所以我用了
Aperture._IOEApp Ap = (Aperture._IOEApp)Microsoft.VisualBasic.Interaction.CreateObject("Aperture.Application");
但现在我得到了
InvalidCastException
"System.__ComObject" cannot be converted into interface type "Aperture._IOEApp".
0x80010105 (RPC_E_SERVERFAULT)).
现在我不知道问题可能会发生什么了。
有谁能告诉我我做错了什么? 或者这应该如何运作?