如何使用COM-Wrapper?

时间:2013-06-07 07:59:33

标签: c# vb.net com com-interop

问题:

我必须通过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(返回类型都是动态的类型)。

enter image description here

所以我尝试重写上面的示例代码(现在在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)).

现在我不知道问题可能会发生什么了。

有谁能告诉我我做错了什么? 或者这应该如何运作?

0 个答案:

没有答案