最近刚开始学ActiveX,做的第一个实验就波折重重
用VS2008建了一个ActiveX工程,命名为MyKJ,然后在_DMyKJ接口添加了一个Test方法和clr属性(Get/Set方法实现),代码如下:
void CMyKJCtrl::Test(void)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
MessageBoxA(NULL,"测试","成功",MB_OK);
}然后我又用VS2008建了一个ASP.net工程,在aspx文件中调用这个ActiveX控件,代码如下:
<script language="javascript" type="text/javascript">
function Button1_onclick() {
     var obj = document.getElementById("MyKJ");
     obj.Test();   
     obj.clr = 1.23;
}
</script>
</head>
<body>
    <form id="form1" runat="server">
    <object id="MyKJ" width=300 height=200  classid="CLSID:F911BE3C-15BA-4250-B062-3FB9F92556E6"></object>
    <input id="Button1" type="button" value="button" onclick="return Button1_onclick()" />
    </form>
</body>
运行后,本预计点击页面的按钮后就调用Test方法弹出对话框,但老是提示对象不支持此属性或方法,不知道到底错在哪里,希望有人指点一下迷津,多谢了!

解决方案 »

  1.   

    STDMETHODIMP CMyKJCtrl::Test(void)
      

  2.   

    interface Izz : IDispatch{ 
    [id(2), helpstring("方法test1")] HRESULT Test([out,retval]); 
    }; 这个接口声明写了没,下面进行方法函数实现
      

  3.   

    MyKJ.idl如下,在里面已经声明了接口的,
    #include <olectl.h>
    #include <idispids.h>[ uuid(79A2D50C-CD4C-4DD2-8BAC-550888BD5524), version(1.0),
      helpfile("MyKJ.hlp"),
      helpstring("MyKJ ActiveX 控件模块"),
      control ]
    library MyKJLib
    {
    importlib(STDOLE_TLB); //  CMyKJCtrl 的主调度接口 [ uuid(A71CE69D-4ADD-4EDE-B90D-09B402DE0D50),
      helpstring("MyKJ Control 的调度接口")]
    dispinterface _DMyKJ
    {
    properties:
    [id(2), helpstring("属性 clr")] FLOAT clr;
    methods: [id(DISPID_ABOUTBOX)] void AboutBox();
    [id(1), helpstring("方法Test")] void Test(void);
    }; //  CMyKJCtrl 的事件调度接口 [ uuid(30CBCB08-BC02-4429-92B2-0FEB96B7A511),
      helpstring("MyKJ Control 的事件接口") ]
    dispinterface _DMyKJEvents
    {
    properties:
    //  事件接口没有任何属性 methods:
    }; //  CMyKJCtrl 的类信息 [ uuid(F911BE3C-15BA-4250-B062-3FB9F92556E6),
      helpstring("MyKJ Control"), control ]
    coclass MyKJ
    {
    [default] dispinterface _DMyKJ;
    [default, source] dispinterface _DMyKJEvents;
    };};
      

  4.   

    今天我也遇到了类似的问题,OCX中的方法不能调用。不知道您的问题解决了吗?