创建MFC ActiveX时一开始添加的自定义方法,返回值类型为void,参数类型为CHAR *,对应的调度映射DISP_FUNCTION_ID中参数返回值类型自动为VTS_PI1。
结果,后来再js调用ocx时,要将js中的字符串作为ocx自定义方法的参数传递过来,js报错“类型不匹配”。
html代码调用ocx代码:
<HTML>
<HEAD>
<p id="demo">https://www.baidu.com</p>
<TITLE>Test ActiveX</TITLE>
<script language="javascript" type="text/javascript">
function functionInfo() {
var url = document.getElementById("demo").innerHTML;
Dean.getWebData(url);
}
</script>
</HEAD>
<OBJECT ID="Dean" WIDTH=100 HEIGHT=100 classid="CLSID:A30D87A7-2489-435F-8CCC-D144F4AE2E83">
<PARAM NAME="_Version" VALUE="65536">
<PARAM NAME="_ExtentX" VALUE="12806">
<PARAM NAME="_ExtentY" VALUE="1747">
<PARAM NAME="_StockProps" VALUE="0">
</OBJECT>
<body>
<input type="button" value="test" onclick="functionInfo()">
</body>
</HTML>
后来看到别人的文章这么说的:
于是,修改了ocx中自定义方法的参数类型为BSTR,调度映射的地方改为VT_BSTR,之后一切正常。
提醒:
需要获取到BSTR类型变量的长度,使用SysStringByteLen()接口。
BSTR转string:strString = (_bstr_t)strBSTR , 头文件<comutil.h>
另外调度映射DISP_FUNCTION_ID的后两个参数分别为返回值类型和参数类型,以下为可选项: