【IT168技术文档】
本系列文章学习怎样从非托管 COM感知客户端中使用托管 .NET 组件。将属于.NET 组件的用户仅仅限制在托管 客户端中这一点,对于那些在过去的时光中已经花费了很多时间来开发应用程序的人来说是非常困难的,这些应用程序不可能一夜之间转化成托管代码。通过使用线路协议,例如:SOAP,.NET结构允许不同平台中全部不相同的应用程序与托管应用程序对话。非托管 COM感知客户端仍然有更容易的方法与托管组件对话。.NET运行库允许非托管 COM 感知客户端通过使用COM Interop以及通过使用由结构提供的工具无缝访问NET 组件。这保证COM 感知客户端可以与.NET 组件对话,好像它们在与普通的Classic COM 组件对话一样。
创建一个.NET组件
首先创建一个简单的.NET 组件,此.NET 组件允许查看城市的温度。仅仅只有public类型被添加到了类型库,并且展示给了COM 感知客户端。而且,如果需要从COM 感知客户端中创建类型,它需要有一个public默认构造器。一个没有public default 构造器的public类型仍然出现在类型库中,尽管它不能从COM中共同直接地制造。Temperature组件有两个方法:DisplayCurrentTemperature和GetWeatherIndications.它有一个被称为Temperature的公共读写属性,此Temperature有相应的获得/设置方法。
Collapse
using System;
using System.Windows.Forms;
using System.Runtime.InteropServices;
public enum WeatherIndications
{
Sunny = 0,
Cloudy,
Rainy,
Snowy
}
[ClassInterface(ClassInterfaceType.AutoDual)]
public class TemperatureComponent
{
private float m_fTemperature = 0;
// 公共构造器
public TemperatureComponent()
{
m_fTemperature = 30.0f;
}
//公共属性
public float Temperature
{
get { return m_fTemperature; }
set { m_fTemperature = value;}
}/* 结束Temperature get/set属性 */
// 显示当前温度的通用方法
public void DisplayCurrentTemperature()
{
String strTemp = String.Format("The current " +
"temperature at Marlinspike is : " +
"{0:####} degrees fahrenheit",
m_fTemperature);
MessageBox.Show(strTemp,"Today's Temperature");
}/* 结束 DisplayCurrentTemperature */
//另一种公共方法来返回数值类型
public WeatherIndications GetWeatherIndications()
{
if(m_fTemperature > 70) {
return WeatherIndications.Sunny;
}
else {
// 返回阴天
return WeatherIndications.Cloudy;
}
}/* 结束GetWeatherIndications */
}/* 结束Temperature类 */