2015-06-08 1 views
1
<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> 

Я использовал тег объекта в файле Htm и предоставил classid и codebase для моего кода. Мой метод Data() успешно вызывается, но вид элемента управления ActiveX не отображается. Я не хочу использовать Caspol.exe исправить мой запросЯ использую элемент управления ActiveX и устанавливаю его с помощью msi. Метод, написанный в классе управления ActiveX, запускается, но пользовательский интерфейс не отображается

+0

Вы уверены, что ваш ControlClass пытается открыть форму после вызова метода Data? –

+0

Единственный видимый объект, который вы создали, это «Форма». Код javascript создает отдельный экземпляр «ControlClass», он не является дочерним элементом формы, поэтому не может быть видимым. Тебе придется подумать об этом. –

+0

Не думаю, что когда ActiveXObject создан, он должен вызвать конструктор моего ControlClass, в котором инициализируется Form, и этот объект также вызывает методы, присутствующие в этом классе. – CodeOptimizer

ответ

0
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; 
     } 
    } 
} 

Этот код написан в моем классе ActiveX, где можно ясно видеть, что конструктор вызвать метод для инициализации объекта формы.

Смежные вопросы