js调用c/c++dll,用字符串/数组作为参数
来源:互联网 发布:艾瑞咨询 网络购物 编辑:程序博客网 时间:2024/05/20 11:22
紧接上一篇文章,本文讨论如何用字符串和数组作为参数。
一 js传递字符串 dll返回字符串
这里dll的方法里面参数类型用char*是不行的,需要用BSTR这种类型。我们演示一下js传递字符串"hello"给dll,然后dll将字符串返回。
1 首先在项目里面点击 视图--类视图,找到类接口,点击右键添加--方法
请参考上一篇文章看一下这个项目如何创建出来的。
填写方法名和参数,结果如下
点击完成。
打开类文件,编辑方法getHe如下
然后编译项目,将Test.dll注册,在页面调用即可。具体步骤请参考上一篇文章
二 dll返回数组
js接受数组需要借助于vbscript,首先返回参数类型也要用VARIANT*类型,我们直接贴源码
以下是c++方法源码
STDMETHODIMP CDYL::returnArray(VARIANT* ra)
{
SAFEARRAY FAR* psa;
//数组维数
SAFEARRAYBOUND rgsabound[1];
rgsabound[0].lLbound = 0;
rgsabound[0].cElements = 2;
psa=SafeArrayCreate(VT_VARIANT,1,rgsabound);//我这里原来没用VT_VARIANT,而是用了VT_I4类型,结果会导致JS代码中new VBArray出错,请一定注意
long idx;
VARIANT setdt;
setdt.vt = VT_R8;
//赋值
idx = 0;
setdt.dblVal = 3.1415926;
SafeArrayPutElement(psa,&idx,&setdt);
idx = 1;
setdt.dblVal = 5.214 ;
SafeArrayPutElement(psa,&idx,&setdt);
//返回安全数组
V_VT(ra) = VT_ARRAY | VT_VARIANT;//我这里原来没用VT_VARIANT,而是用了VT_I4类型,结果会导致JS代码中new VBArray出错,请一定注意
V_ARRAY(ra) = psa;
return S_OK;
}
以下是js调用的代码:
<script>
var mydll=new ActiveXObject("dyl");
var result=new VBArray(mydll.returnArray()).toArray();
alert(result);
</script>
以上方法能实现dll返回的参数js接收到,不过局限就是在ie下,要借助vb,所以,有传递数组的需求的话,建议使用字符串传递,然后分别在js或者c/c++里面解析成数组。
- js调用c/c++dll,用字符串/数组作为参数
- c/c++:二维数组作为参数传递
- C/C++ 二维数组作为函数参数
- 二维数组作为函数参数(C语言)
- C语言数组作为函数参数
- C语言数组作为函数参数
- C语言数组作为函数参数
- C++---将二维数组作为参数
- c::用字符串代替空格f
- Objective-c语言_用字符串方法和数组如何获取物理IP地址
- C# 调用C++DLL参数异常解决方法
- c#调用C++DLL参数对应
- c#调用C++DLL参数对应
- c#调用C++DLL参数对应
- c#调用C++DLL参数对应
- c# 调用c/c++ dll 参数问题
- C语言数组作为函数参数及保护数组内容
- 强化C数组作为函数参数-多维数组的本质
- poj 1419 最大团
- Spark SQL完善的表达式系统
- ext4 学习笔记二
- dialog悬浮于通知栏上
- hdu2037今年暑假不AC以及HDU1051涉及贪心对数轴区间的处理。
- js调用c/c++dll,用字符串/数组作为参数
- eclipse中导入Java文件的方法
- Coursera Scala 2-5,6:类
- Qwt源码解读之标尺相关类——QwtScaleMap
- 天津哪个治精神病医院最好
- STL跨平台调用会出现很多异常,你可以试试.
- 天津哪个治疗精神病病医院好
- linux系统下编写一个makefile文件
- 天津哪个治疗精神病医院比较好