c#编写com组件
1.新建windows类库应用程序,在properties目录AssemblyInfo文件中,将ComVisible(False)设置成ComVisible(true)。
2.在项目属性,build选项,勾选register for com interop。
3.编写com代码(sensorEvents定义事件接口)。
如下:
[Guid("368C19C3-A726-49b5-A2D8-482680ADDA1D")]
public interface ISensorManagerEx
{
[DispId(1)]
Accelerometer3D[] GetAcceleromreter3DSensors();
}
[Guid("47C976E0-C208-4740-AC42-41212D3C34F0")]
[InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
public interface SensorEvents
{
[DispId(1)]
void SensorsChanged(SensorsChangedEventArgs e);
}
[ComVisible(true)]
[Guid("0E09C797-F5D4-495F-8D30-A975A8434454")]
[ProgId("SensorsCom.SensorManagerEx")]
[ClassInterface(ClassInterfaceType.None)]
[ComSourceInterfaces(typeof(SensorEvents))]
public class SensorManagerEx : ISensorManagerEx
{
public SensorManagerEx()
{
SensorManager.SensorsChanged += new SensorsChangedEventHandler(SensorManager_SensorsChanged);
}
public event SensorsChangedEventHandler SensorsChanged;
void SensorManager_SensorsChanged(SensorsChangedEventArgs e)
{
SensorsChanged(e);
}
public Accelerometer3D[] GetAcceleromreter3DSensors()
{
return SensorManager.GetSensorsByTypeId<Accelerometer3D>().ToArray();
}
}
4.编译dll,使用命令C:\Windows\Microsoft.NET\Framework\v4.0.30319\RegAsm.exe SensorsCom.dll注册com。
到此c#写COM已经OK了!
silverlight中调用com
1.将silverlight程序设置为最高权限,OOB模式。否则silverlight不能调用com。
2.调用代码
如下:
using (dynamic SensorManager = AutomationFactory.CreateObject("SensorsCom.SensorManagerEx"))
{
dynamic SensorList = SensorManager.GetAcceleromreter3DSensors();
AutomationEvent SensorReportEvent = AutomationFactory.GetEvent(SensorManager, "SensorsChanged");
SensorReportEvent.EventRaised += (s, arges) =>
{
//do what you want.
};
}


