调用方法、属性和事件

更新:2007 年 11 月

.NET 客户端可以对活动 COM 对象调用方法,调整其属性并捕捉在服务器上发生的事件。Loan coclass(非托管 C++、ATL)将公开显示为本节中代码示例的方法和属性。

调用方法

从托管代码中对 COM 对象调用方法完全类似于对托管对象调用方法。由于 COM 组件始终通过接口公开功能,所以可选择对接口调用方法或直接对 COM coclass 调用方法。coclass 仅公开由它的默认接口公开的成员。下面的示例代码将直接对导入的 coclass 调用 GetFirstPmtDistribution 方法:

MorePmts = ln.GetFirstPmtDistribution(ln.Payment, Balance, _
               Principal, Interest)
MorePmts = ln.GetFirstPmtDistribution(ln.Payment, out Balance, 
               out Principal, out Interest);

COM interop 将为您封送数据类型。例如,如果将 System.String 类型传递给一个 COM 对象,COM Interop 就会将该类型转换为 BSTR。

类型库中标记为 [out retval] 的参数将转换为方法返回值。此转换过程会从托管签名中移除这些参数。默认情况下,运行库会将失败的 HRESULT 映射到一个等效的托管异常,从而向托管代码引发异常。

获取和设置属性

COM 接口可以将属性当作接口成员包括在内。按照获取和设置托管类所公开的属性时所采用的方式,您可以获取或设置 COM 对象所公开的属性。作为程序集中的元数据导入的 COM 接口和 coclass 将公开属性以及每一属性的访问器方法。下面的代码示例设置 OpeningBalance 属性:

ln.OpeningBalance = Convert.ToDouble(Args(1))
ln.OpeningBalance = Convert.ToDouble(Args[0]);

有关属性转换的详细信息,请参见导入成员转换。有关 .NET Framework 中属性的概述,请参见属性概述

处理事件

.NET 客户端可以按处理其他任何托管事件的方式来处理 COM 服务器引发的事件。当导入服务器的类型库时,转换过程将创建要连结到事件处理程序的委托。有关此过程的详细信息,请参见处理 COM 源引发的事件

请注意,在 .NET 客户端中引发事件的 COM 对象在被释放前需要执行两次垃圾回收器 (GC) 回收。这是由于在 COM 对象和托管客户端之间发生的引用循环导致的。如果需要显式释放 COM 对象,应该调用两次 Collect 方法。

请参见

任务

如何:映射 HRESULT 和异常

概念

在托管代码中使用 COM 类型

导入成员转换

属性概述

COM Interop 示例:.NET 客户端和 COM 服务器

其他资源

互操作封送处理