折腾着,自己摸索着走,会的,不会的,自己查。一门没学过的语言,虽然说很多的语法和用法和之前所学的很多的一样,但是句型和基础结构都不一样。会点,记点,防忘~~
摸索着做了个demo.ocx控件,步骤如下:
file -> new -> other -> ActiveForm ,为何用这个俺也不懂,从网上看到的。然后 edite -> add to interface 编写function 或者procedure,自己做了个function函数Get_DeviceOpen(Port, BaudRate: Integer): WideString; 输入两个int参数,输出的是WideString
但不知道为何,add to Interface这个菜单按钮总是灰色的,使用不了,问了同事,在view -> type Library那里右键选择 new -> method ,然后在 parameters那里编辑相应的参数;如图:使用的是function有返回的值,折磨了下将modify的值设置为图的类型就可以了。
一直的在想着,pascal 没有用return来返回值,到底在函数里面,返回的是哪个的值,昨天想到今天,网上查不到,弄了弄,早上无意中看到人家将函数的名称进行赋值,才明白:
function TActiveFormX.Get_DeviceOpen(Port, BaudRate: Integer): WideString;
var resulted: Integer;
begin
resulted := open_device(Port,BaudRate);
if(resulted <> 0) then
begin
Get_DeviceOpen := '打开端口失败' //函数返回值
end //此没有“;”
else
begin
Get_DeviceOpen := '打开端口成功,波特率为'+inttostr(BaudRate) //函数返回值
end;
end;
在应用层上调用底层动态库接口函数,调用如下:
function open_device(const port:integer; const baud:integer):word; stdcall ;external 'mw_mt32.dll';
function get_version(const icdev:integer;const Ver,Verlen:PAnsiChar):word;stdcall ;external 'mw_mt32.dll';
其中接口文档的说明如下:
打开通讯接口
HANDLE open_device(__int16 port,unsigned long baud);
功能:初始化通讯端口
参数:
Port:通讯端口号,0、1、2、3分别代表串口1、2、3、4;
对于USB口,该参数无效,可以设置为0.
baud:通讯口为串口时表示波特率,其值可为1200~115200。
对于USB口,该参数无效,可以设置为0.
返回值:
2.读取硬件版本号
__int16 get_version(HANDLE icdev,unsigned char *Ver);
功能:读硬件版本信息
参数:icdev:通讯设备标识符
len:硬件版本长度
data_buffer:硬件版本信息
返回值:
<>0 失败
=0 成功
<=0 错误
>0 通讯设备标识符
使用静态网页调用我的中间ocx控件,在网页中插入控件的内容(如下):
<body>
<object classid="clsid:79198F0E-12AD-4585-A5E4-B51051A1850A" width="0" height="0" id="dtm" codebase="mw_mt.ocx"> </object>
使用js脚本,在js脚本中调用控件的function如下: resulted = dtm.Get_DeviceOpen(port,BaudRate);