C# 我正在使用ActiveX控件并通过msi安装它。ActiveX用户控件类中编写的方法正在启动,但UI不可见 var x=新的ActiveXObject(“ActiveXControl.ControlClass”); x、 UserTxt=“Aashish”; x、 密码=“Rockstar”; x、 getmethod(); 警报(x.Data());

C# 我正在使用ActiveX控件并通过msi安装它。ActiveX用户控件类中编写的方法正在启动,但UI不可见 var x=新的ActiveXObject(“ActiveXControl.ControlClass”); x、 UserTxt=“Aashish”; x、 密码=“Rockstar”; x、 getmethod(); 警报(x.Data());,c#,cas,activexobject,caspol,C#,Cas,Activexobject,Caspol,我在Htm文件中使用了对象标记,并为代码提供了classid和代码库。My method Data()调用成功,但ActiveX控件的视图不可见。我不想使用Caspol.exe来修复我的查询 <object name="Form" id='Form' classid='2F76566A-964F-4547-BD48-EE498AE1A7A2' codebase='ActiveXControl.cab#version=1,0,0,0' width="500px"

我在Htm文件中使用了对象标记,并为代码提供了classid和代码库。My method Data()调用成功,但ActiveX控件的视图不可见。我不想使用Caspol.exe来修复我的查询

<object name="Form" id='Form' classid='2F76566A-964F-4547-BD48-EE498AE1A7A2' 
       codebase='ActiveXControl.cab#version=1,0,0,0'
       width="500px" height="500px" style="background-color:Blue">
</object>

<script type="text/javascript" language="javascript">
    var x = new ActiveXObject("ActiveXControl.ControlClass");
    x.UserTxt = "Aashish";
    x.password = "Rockstar";
    x.getmethod();
    alert(x.Data());
</script>
这段代码是在我的ActiveX类中编写的,在我的ActiveX类中可以清楚地看到构造函数正在调用方法来初始化表单对象


这段代码是在我的ActiveX类中编写的,在我的ActiveX类中可以清楚地看到构造函数正在调用方法来初始化表单对象。

您确定您的ControlClass在调用其数据方法后尝试打开表单吗?您创建的唯一可见对象是“表单”。javascript代码创建了一个单独的“ControlClass”实例,它不是表单的子控件,因此不可见。你必须重新思考这个问题。不,我的想法是,当创建ActiveXObject时,它应该调用我的ControlClass的构造函数,在该构造函数中窗体正在初始化,而该对象正在进一步调用该类中存在的方法。你确定你的ControlClass在调用其数据方法后尝试打开窗体吗?唯一可见的对象您创建的是“表单”。javascript代码创建了一个单独的“ControlClass”实例,它不是表单的子控件,因此不可见。你必须重新思考这个问题。不,我的想法是,当创建ActiveXObject时,它应该调用我的ControlClass的构造函数,在该构造函数中窗体正在初始化,而该对象正在进一步调用该类中存在的方法。你确定你的ControlClass在调用其数据方法后尝试打开窗体吗?唯一可见的对象您创建的是“表单”。javascript代码创建了一个单独的“ControlClass”实例,它不是表单的子控件,因此不可见。你必须重新思考这个问题。不,我的想法是,当ActiveXObject被创建时,它应该调用我的ControlClass的构造函数,在这个构造函数中表单正在初始化,而这个对象正在进一步调用这个类中存在的方法。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;

namespace ActiveXControl
{
    [ComVisible(true)]
    [ClassInterface(ClassInterfaceType.None)]
    [Guid("2F76566A-964F-4547-BD48-EE498AE1A7A2")]
    [ProgId("ActiveXControl.ControlClass")]
    [ComDefaultInterface(typeof(Intermediate))]
    public partial class ControlClass : UserControl, Intermediate, IObjectSafety
    {
        public ControlClass()
        {
            InitializeComponent();
        }
        public string UserTxt { get; set; }
        public string password { get; set; }

        public void getmethod()
        {
            textBox1.Text = UserTxt;
            textBox2.Text = password;
        }
        public string Data()
        {
            return textBox1.Text +" " + textBox2.Text;
        }
        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;
        }
    }
}