Delphi 编写Activex控件如何传出字符串(300)

  • 主题发起人 主题发起人 qqjm
  • 开始时间 开始时间
Q

qqjm

Unregistered / Unconfirmed
GUEST, unregistred user!
调用的页面<html><head></head><object classid="clsid:F1B2B6A4-687A-4EA2-B34B-19713D248B50" width="100" height="100" border="2" id="SD"></object><script language="VBscript">Function read() dim port,factory, password, data port="5" factory = "A" password = "000000" MsgBox("开始读卡") SD.Read_Card port,factory,password, data MsgBox("数据:" + data)End Function</script><input type="button" value="读卡" onclick="read()"></body></html>Read_Card 有4个参数,都是字符串类型,数据通过data返回。 port,factory,password这三个参数我定义为BSTR [in] data 定义为 BSTR * [out]自己写的程序调用是没有问题的,输入输出都正确,但是用VBScript JavaScript调用就出错是不是我的参数类型定义有问题,参数应该如何定义?
 
最好把类型读定义好了:MsgBox("开始读卡")data="*****" 告诉解释器 data是字符串SD.Read_Card port,factory,password, data
 
不是这个问题 。我用VB、C#做了同样的ActiveX控件,并且都是这样调用的,没有问题。但是用Delphi做的就不行。VBscript执行的时候出错,提示类型不匹配,JavaScript没有获取返回值。我用C#做了一个程序调用这个ActiveX控件,是可以正确获得数据。
 
delphi的String类有点特别,跨语言的,你就PChar或Array of char代替String吧
 
没试过用传出参数[:)]但直接用函数返回是没有问题的。
 
知道你的意思了,Delphi传入和返回传入是预留返回的字符空间,Data="012345678901234567890123456789" 30个字符空间Delphi函数需要返回的串,例如tmstms:=tms+#0#0;
// 注意加2个#0 Data:=PChar(TmS);//Data 为函数申明: PChar;
 
是不是你調用端定義的變量類型與方法中參數的類型不一致的問題?
 
不就是个输出参数嘛,定义成WideString就好.
 
问题初步解决,现次证明,自己测试比问人是要快的。使用VARIANT *这种 类型可以在VBScript和JavaScript取得数据。不知道有没有其它方法?
 
看来也没有什么其它方法了!谢谢各位
 
var readcard=window.document.getElementById("SD");
//通过ID获取OCX对象readcard.Read_Card port,factory,password);
//通过获取的对象调用OCX方法
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
639
import
I
后退
顶部