代码改变世界

Silverlight使用自定义的COM组件

2012-06-08 11:21  血糯米Otomii  阅读(504)  评论(0编辑  收藏  举报

Hi,

code first:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;

namespace ClassLibraryForPrint
{
    [InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
    public interface IComEvents
    {
        void OnPrintBegin(object sender, EventArgs e);
    }

    public delegate void ComDelegate(object sender, EventArgs e);

    [ComVisible(true)]
    [ComSourceInterfaces(typeof(IComEvents))]
    [ProgId("ClassLibraryForPrint.PrintDemos")]
    public class PrintDemos
    {
        public string Print()
        {
            if (OnPrintBegin != null) OnPrintBegin(this, new EventArgs());
            return "Printing";
        }
        public event ComDelegate OnPrintBegin;
    }

}

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using System.Runtime.InteropServices.Automation;

namespace SilverlightApplication171
{
    public partial class MainPage : UserControl
    {
        public MainPage()
        {
            InitializeComponent();
            using (dynamic PrintDemos = AutomationFactory.CreateObject("ClassLibraryForPrint.PrintDemos"))
            {
                AutomationEvent automationEvent = AutomationFactory.GetEvent(PrintDemos, "OnPrintBegin");
                dynamic printStr = PrintDemos.Print();
                label1.Content = printStr;
            }
        }
    }
}

Hope helpful

 

Something need to do:

1.set the ComVisible(true) in the file AssemblyInfo in properites folder in windows Class Lib.

2.check the register for com interop in the property of the project.

3.use the RegAsm.exe to register the dll.

4.check the appcation is running in oob and in the out-of-browser setting ,be sure that require elevated trust is checked.