急急急啊,为什么我的dll动态链接库调用不成功? ( 积分: 49 )

  • 主题发起人 主题发起人 hoyaxun
  • 开始时间 开始时间
H

hoyaxun

Unregistered / Unconfirmed
GUEST, unregistred user!
implementation

uses Unit2,unit19,Unit3,unit7,unit10,unit13,unit16,showiodate, datemodel,
function open_door( sy_id:pchar;door:pchar;delaytime:pchar):integer;stdcall;external 'syris.dll';
在这里声明之后,调用:
在一个ontimer事件中调用: open_door('02','01','0003');
报错:无法定们程序输入点open_door于动态链接库syris.dll上,为什么会这样啊,那位大哥帮帮我啊,我非常着急啊?
各位大哥,现在我把Open_door函数的使用说明写出:
11 Close_Door(Sy_id,Door,DelayTime)
功能:程序控制关门
参数:Sy_id:控制器地址(2 字节字符串)
Door:2 字节,值从“01”-“04”
DelayTime:关门延时时间(0000-9999秒 注“0000”时将一直关门)
返回:返回整型值 0-表示成功,4-表示失败。
12 Open_Door(Sy_id,Door,DelayTime)
功能:程序控制开门
参数:Sy_id:控制器地址(2 字节字符串)
Door:2 字节,值从“01”-“04”
DelayTime:4字节,开门延时时间(0000-9999秒, 注“0000”时将一直开门)
返回:返回整型值 0-表示成功,4-表示失败。
那位大哥,看完这个之后,能帮我举个例子:如何声明,使用吗? 急啊!
 
implementation

uses Unit2,unit19,Unit3,unit7,unit10,unit13,unit16,showiodate, datemodel,
function open_door( sy_id:pchar;door:pchar;delaytime:pchar):integer;stdcall;external 'syris.dll';
在这里声明之后,调用:
在一个ontimer事件中调用: open_door('02','01','0003');
报错:无法定们程序输入点open_door于动态链接库syris.dll上,为什么会这样啊,那位大哥帮帮我啊,我非常着急啊?
各位大哥,现在我把Open_door函数的使用说明写出:
11 Close_Door(Sy_id,Door,DelayTime)
功能:程序控制关门
参数:Sy_id:控制器地址(2 字节字符串)
Door:2 字节,值从“01”-“04”
DelayTime:关门延时时间(0000-9999秒 注“0000”时将一直关门)
返回:返回整型值 0-表示成功,4-表示失败。
12 Open_Door(Sy_id,Door,DelayTime)
功能:程序控制开门
参数:Sy_id:控制器地址(2 字节字符串)
Door:2 字节,值从“01”-“04”
DelayTime:4字节,开门延时时间(0000-9999秒, 注“0000”时将一直开门)
返回:返回整型值 0-表示成功,4-表示失败。
那位大哥,看完这个之后,能帮我举个例子:如何声明,使用吗? 急啊!
 
function open_door( sy_id:pchar;door:pchar;delaytime:pchar):integer;external 'syris.dll';
 
呵呵,你的syris.dll在当前目录吗?
不是的话移到当前目录就ok了,或者在external部分指定。
 
function open_door(sy_id:pchar;door:pchar;delaytime:pchar):integer;stdcall;external 'syris.dll';
这句放在
var
Form : Tform 后面
stdcall是要的.
 
上面两种方法都试过了,不行啦,大哥
 
把你dll中函数声明部分贴出来
 
1、问题可能在函数的参数上,可能是 PChar 的问题;
2、也可能是函数在 Dll 的声明不对,你光贴调用部分有什么用啊,你声明部分不贴出来等于没问!
 
我这个dll文件是别人写的啦,我只是用它做开发,我手里只有这个包的使用说明,我也看不到,现在我的问题是,原来的问题是没有注意大小写,现在的问题是得不到正确的返回值,
open_door('02','01','0003');
这个是不是要改成为这样:open_door(pchar('02'),pchar('01'),pchar('0003'));啊?
按说明书上说的:返回整形值0- 成功,4-失败可是我现在得到的是5,为什么啊?
 
同意,很有可能是参数 不正确。sy_id:pchar;door:pchar;delaytime:pchar
可能声明错了。看看说明书是不是这样呀,sy_id:int;door;pchar;delaytime:int
 
各位大哥,现在我把Open_door函数的使用说明写出:
11 Close_Door(Sy_id,Door,DelayTime)
功能:程序控制关门
参数:Sy_id:控制器地址(2 字节字符串)
Door:2 字节,值从“01”-“04”
DelayTime:关门延时时间(0000-9999秒 注“0000”时将一直关门)
返回:返回整型值 0-表示成功,4-表示失败。
12 Open_Door(Sy_id,Door,DelayTime)
功能:程序控制开门
参数:Sy_id:控制器地址(2 字节字符串)
Door:2 字节,值从“01”-“04”
DelayTime:4字节,开门延时时间(0000-9999秒, 注“0000”时将一直开门)
返回:返回整型值 0-表示成功,4-表示失败。
那位大哥,看完这个之后,能帮我举个例子:如何声明,使用吗? 急啊!
 
1、function Open_Door(const Sy_id, Door: ShortString[2]; const DelayTime: ShortString[4]): Longint; stdcall; external 'syris.dll';
2、使用方法不变;
3、不知道好不好使,试一下。
 
to vvyang 大哥,
你能不能帮我举个例子,教我具体如何用啊?
 
啊,不是说使用方法不变么。@_@
n := Open_Door('02','01','0003');
 
to vvyang 大哥,我是这样用的:
function Open_Door(const Sy_id, Door: ShortString[2]; const DelayTime: ShortString[4]):Longint;stdcall;external 'syris.dll';
这一句通不过啊,报错, ShortString[2]光标停在这里?
 
啊,忘了。
function Open_Door(const Sy_id, Door: String[2]; const DelayTime: String[4]):Longint;stdcall;external 'syris.dll';
这时 String 转化为 ShortString。
 
to vvyang 大哥,
function Open_Door(const Sy_id, Door: String[2]; const DelayTime: String[4]):Longint;stdcall;external 'syris.dll'; 还是报错啊,光标停在String[2];
提示:";",")" or "=" except but "(" found !
怎么处理啊,大哥?
 
这样吧
type
TStrLen2 = array[0..1] of Char;
TStrLen4 = array[0..3] of Char;

function Open_Door(const Sy_id, Door: TStrLen2; const DelayTime: TStrLen4): Longint; stdcall; external 'syris.dll';
 
to vvyang 大哥,
我没改之前,可能运行,可是调用函数没有得到想要的结果和返回值,按大哥的方法改动后,可以编译通过,可是运行时,当调用这一句时,Open_Door('01','01','0003'); 系统报错;Access violation at address 00373ae7 in module 'syris.dll'
怎么会这样?
大哥,你的qq是多少啊?
 
可能是String类型的问题吧
 

Similar threads

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