visual studio 2010 मैं सी#में ActiveX नियंत्रण(COM) कैसे बना सकता हूं?




visual-studio-2010 c#-4.0 (3)

ठीक है मुझे समाधान मिला और मैं इसे सामान्य अच्छे के लिए यहां लिखूंगा।

  1. व्यवस्थापक के रूप में VS2010 शुरू करें।
  2. एक कक्षा पुस्तकालय परियोजना खोलें (exmaple - MyProject)।
  3. प्रोजेक्ट में एक नया इंटरफ़ेस जोड़ें (नीचे उदाहरण देखें)।
  4. एक using System.Runtime.InteropServices; जोड़ें using System.Runtime.InteropServices; फ़ाइल में
  5. इंटरफ़ेस में इंटरफ़ेस टाइप करें, मार्गदर्शिका जोड़ें।
  6. आप टूल्स का उपयोग करके एक ग्रिड उत्पन्न कर सकते हैं-> GUID उत्पन्न करें (विकल्प 4)।
  7. इंटरफ़ेस को लागू करने वाली कक्षा जोड़ें।
  8. इंटरफेस में क्लासइंटरफेस, ग्रिड, प्रोगिड गुण जोड़ें।
    प्रोगिड सम्मेलन {नेमस्पेस} है। {वर्ग}
  9. असेंबलीइन्फो फ़ाइल में प्रोजेक्ट में गुण फ़ोल्डर के तहत सत्य के लिए ComVisible सेट करें।
  10. प्रोजेक्ट प्रॉपर्टी मेनू में, बिल्ड टैब मार्क में "COM इंटरऑप के लिए रजिस्टर करें"
  11. परियोजना का निर्माण करें

अब आप अपने COM ऑब्जेक्ट का उपयोग अपने प्रोगिड का उपयोग करके कर सकते हैं।

उदाहरण: सी # कोड:

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

using System.Runtime.InteropServices;

namespace Launcher
{

    [InterfaceType(ComInterfaceType.InterfaceIsDual), Guid("XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX")]
    public interface ILauncher
    {
        void launch();
    }

    [ClassInterface(ClassInterfaceType.None), Guid("YYYYYYYY-YYYY-YYYY-YYYY-YYYYYYYYYYY"), ProgId("Launcher.Launcher")]
    public class Launcher : ILauncher
    {
        private string path = null;

        public void launch()
        {
            Console.WriteLine("I launch scripts for a living.");

        }

    }
}

और COM का उपयोग कर वीबी स्क्रिप्ट:

set obj = createObject("PSLauncher.PSLauncher") obj.launch()

और आउटपुट होगा:

मैं एक जीवित रहने के लिए स्क्रिप्ट लॉन्च करता हूं

मैं एक ActiveX नियंत्रण बनाने की कोशिश कर रहा हूँ। मैं Visual Studio 2010 (.NET 4) का उपयोग कर रहा हूं। मुझे एक COM ऑब्जेक्ट (सी # में) बनाने की आवश्यकता है और मुझे पता नहीं है कि कैसे शुरू किया जाए (किस प्रकार का प्रोजेक्ट उपयोग करना है, आदि)


आप कक्षा पुस्तकालय परियोजना का उपयोग कर सकते हैं। विधियों के साथ एक प्रकार घोषित करें जो COM ऑब्जेक्ट के रूप में उजागर किया जाएगा।

सुनिश्चित करें कि असेंबली COM-visible बना दिया गया है:

और अंत में regasm.exe का उपयोग करके इसे पंजीकृत करें:

regasm.exe /codebase mylib.dll

अब असेंबली को COM ऑब्जेक्ट के रूप में उजागर किया गया है और आपके द्वारा घोषित किए गए प्रकार को COM का समर्थन करने वाले किसी भी ग्राहक द्वारा उपभोग किया जा सकता है।


निर्माण कदम

  1. व्यवस्थापक के रूप में विजुअल स्टूडियो 2013 शुरू करें
  2. विजुअल स्टूडियो एक्सटेंशन माइक्रोसॉफ्ट विजुअल स्टूडियो इंस्टालर प्रोजेक्ट्स इंस्टॉल करें
  3. क्लास लाइब्रेरी प्रोजेक्ट बनाएं (WinFormActivex)
  4. अपना उदाहरण विंडो फॉर्म बनाएं (मेनविंडो)
  5. एक नया घटक इंटरफ़ेस बनाएं (ILauncher)
  6. एक नया सुरक्षा इंटरफ़ेस बनाएं (IObjectSafety)
  7. घटक नियंत्रण (लॉन्चर) बनाएं जो इंटरफेस को कार्यान्वित करें और विंडो लॉन्च करें।
  8. जांचें कि आपके द्वारा सभी GUID उत्पन्न होते हैं
  9. जांचें कि परियोजना COM के लिए चिह्नित है
  10. WinFormActivex के प्राथमिक आउटपुट के साथ सेटअप प्रोजेक्ट (LauncherInstaller) बनाएं संपत्ति के साथ Register = vsdrpCOM
  11. LauncherInstaller स्थापित करें
  12. एक्सप्लोरर में अपना टेस्ट पेज चलाएं (test.html)

मेनविंडो आप एक सामान्य फॉर्म बना सकते हैं, यहां प्री-जेनरेट किया गया है।

public partial class MainWindow : Form
{
    public MainWindow()
    {
        InitializeComponent();
    }

    /// <summary>
    /// Required designer variable.
    /// </summary>
    private System.ComponentModel.IContainer components = null;

    /// <summary>
    /// Clean up any resources being used.
    /// </summary>
    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
    protected override void Dispose(bool disposing)
    {
        if (disposing && (components != null))
        {
            components.Dispose();
        }
        base.Dispose(disposing);
    }

    #region Windows Form Designer generated code

    /// <summary>
    /// Required method for Designer support - do not modify
    /// the contents of this method with the code editor.
    /// </summary>
    private void InitializeComponent()
    {
        this.textBox1 = new System.Windows.Forms.TextBox();
        this.textBox2 = new System.Windows.Forms.TextBox();
        this.SuspendLayout();
        //
        // textBox1
        //
        this.textBox1.Location = new System.Drawing.Point(42, 23);
        this.textBox1.Name = "textBox1";
        this.textBox1.Size = new System.Drawing.Size(100, 20);
        this.textBox1.TabIndex = 0;
        //
        // textBox2
        //
        this.textBox2.Location = new System.Drawing.Point(42, 65);
        this.textBox2.Name = "textBox2";
        this.textBox2.Size = new System.Drawing.Size(100, 20);
        this.textBox2.TabIndex = 0;
        //
        // MainWindow
        //
        this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
        this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
        this.ClientSize = new System.Drawing.Size(284, 261);
        this.Controls.Add(this.textBox2);
        this.Controls.Add(this.textBox1);
        this.Name = "MainWindow";
        this.Text = "MainWindow";
        this.ResumeLayout(false);
        this.PerformLayout();

    }

    #endregion

    private System.Windows.Forms.TextBox textBox1;
    private System.Windows.Forms.TextBox textBox2;
}

iLauncher

using System.Runtime.InteropServices;
namespace WinFormActivex
{
    [ComVisible(true)]
    [InterfaceType(ComInterfaceType.InterfaceIsDual)]
    [Guid("94D26775-05E0-4B9C-BC73-C06FE915CF89")]
    public interface ILauncher
    {
        void ShowWindow();
    }
}

IObjectSafety

[ComImport()]
[Guid("51105418-2E5C-4667-BFD6-50C71C5FD15C")]
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
interface IObjectSafety
{
    [PreserveSig()]
    int GetInterfaceSafetyOptions(ref Guid riid, out int pdwSupportedOptions, out int pdwEnabledOptions);
    [PreserveSig()]
    int SetInterfaceSafetyOptions(ref Guid riid, int dwOptionSetMask, int dwEnabledOptions);
    }

लॉन्चर कृपया अपना GUID यहां बनाएं।

 [ComVisible(true)]
 [ClassInterface(ClassInterfaceType.None)]
 [Guid("D100C392-030A-411C-92B6-4DBE9AC7AA5A")]
 [ProgId("WinFormActivex.Launcher")]
 [ComDefaultInterface(typeof(ILauncher))]
 public class Launcher : UserControl, ILauncher, IObjectSafety
 {
     #region [ ILauncher ]

     public void ShowWindow()
     {
         var f = new MainWindow();
         f.StartPosition = FormStartPosition.Manual;
         f.Location = Screen.AllScreens[0].Bounds.Location;
         f.WindowState = FormWindowState.Normal;
         f.WindowState = FormWindowState.Maximized;
         f.ShowInTaskbar = false;
         f.Show();
     }

     #endregion

     #region [ IObjectSafety ]

     public enum ObjectSafetyOptions
     {
         INTERFACESAFE_FOR_UNTRUSTED_CALLER = 0x00000001,
         INTERFACESAFE_FOR_UNTRUSTED_DATA = 0x00000002,
         INTERFACE_USES_DISPEX = 0x00000004,
         INTERFACE_USES_SECURITY_MANAGER = 0x00000008
     };

     public int GetInterfaceSafetyOptions(ref Guid riid, out int pdwSupportedOptions, out int pdwEnabledOptions)
     {
         ObjectSafetyOptions m_options = ObjectSafetyOptions.INTERFACESAFE_FOR_UNTRUSTED_CALLER | ObjectSafetyOptions.INTERFACESAFE_FOR_UNTRUSTED_DATA;
         pdwSupportedOptions = (int)m_options;
         pdwEnabledOptions = (int)m_options;
         return 0;
     }

     public int SetInterfaceSafetyOptions(ref Guid riid, int dwOptionSetMask, int dwEnabledOptions)
     {
         return 0;
     }

     #endregion
 }

test.html कृपया अपना सीएलएसआईडी मैच (लॉन्चर) GUID जांचें।

<html>
    <head>
        <objectname="activexLauncher" style='display:none' id='activexLauncher' classid='CLSID:D100C392-030A-411C-92B6-4DBE9AC7AA5A' codebase='WinFormActivex'></object>
      <script language="javascript">
        <!-- Load the ActiveX object  -->
        var x = new ActiveXObject("WinFormActivex.Launcher");
        alert(x.GetText());
      </script>
    </head>
    <body>
    </body>
</html>

संदर्भ





c#-4.0