最近客户需求中需要开发一个支持IE的OCX控件,想用ATL来实现,实际开发时遇到一个问题,就是ATL的接口的返回值都是STDMETHODIMP类型的,这个好像只能看出成功或者失败。
现在有个问题就有个功能接口他要返回一个字符串,然后给网页接收并且根据这个字符串做相应操作,现在不知道怎么把这个字符串返回出来,VS2008的添加接口向导里有个retval的勾选框,这里我已经勾选上了的。然后网页调用那个接口我给这个接口传参数时报错,不给他传参数就能正常运行,AtlTest.GetTEST("aaa");这样报错。AtlTest.GetTEST();这样就正常。
接口声明:STDMETHOD(GetTEST)(BSTR* str);尽管不传参数正常调用了GetTEST接口,但是没有拿到相应返回值。我接着就想传变量给GetTEST接口。
var a = "213";
AtlTest.GetTEST(a);
alert(a);
但是想上述那样操作,也是直接报错……
我本以为是str的值会给a的,但是好像不对,我感觉好像是str是指针,a这个不是,不过不知道能不能传地址值进去?用ATL方式实现是不是没办法自己定义返回值的类型啊?下面是网页源码:
<HTML>
<HEAD>
<TITLE>MyActiveX - Methods, Properties, and Events</TITLE> 
<SCRIPT LANGUAGE="JavaScript">function CallAtl() {
    var a = "213";
    AtlTest.GetTEST(a);
    alert(a);
    AtlTest.GetTEST(); //单独这一句的话,能正常调用接口!
}
</SCRIPT>
</HEAD>
<BODY>
<center>
MyActiveX - ATL - TEST
<p></p> 
<OBJECT ID="AtlTest"
CLASSID="CLSID:25846C03-236A-4322-A9CA-8E7DB13B47E7">
    <PARAM NAME="_Version" VALUE="65536">
    <PARAM NAME="_ExtentX" VALUE="2646">
    <PARAM NAME="_ExtentY" VALUE="1323">
    <PARAM NAME="_StockProps" VALUE="0">
</OBJECT>
<INPUT TYPE="button" NAME="Print" 
       VALUE="Call" ONCLICK=CallAtl()>   
</SCRIPT>
</center>
</BODY>网页代码我也不是很会写,参考别人的,改的……