0

问题:

我必须(在 VB.NET 中)通过 COM-Wrapper 使用应用程序(Aperture)的 OLE 自动化。

目前,我关闭选项严格,并这样做(使用后期绑定):

Dim m_Aperture As Object = CreateObject("Aperture.Application")
Dim m_Project As Object = m_Aperture.Project

你看到问题了,一切都是对象,没有智能感知等。
非常糟糕。

由于我想让智能感知和编译时检查工作,我尝试自动创建一个 COM 包装器,如下所示:

"C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\TlbImp.exe" OEAPP.TLB /out:Aperture.dll

到目前为止工作出色,它创建了包装器,我可以在它上面使用智能感知(虽然返回类型都是动态类型)。

在此处输入图像描述

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

现在我不知道问题可能是什么了。

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

4

0 回答 0