DLL文件:HotelReader.dll
下载地址:http://www.onlense.com/hotelreader.dll
供应商给我们提供了一个VB写的软件,也给了份其中一DLL的接口说明。该DLL文件是COM接口的。
我调用的方法是 Project--import type library---add 将其安装到ACTIVE面板上,再调用的。
可不知道为什么老出错,DLL里的一个方法都调用不成功,运行时老提示"Access violation at address 0040580D in module "RF.exe".Read of address 4D004104".
请教各位,为什么会有这样的提示?
动态库里面有一个NewAuthorizationCode方法,可以随机创建一个Widestring类型的字符串,
哪位大哥能帮我写一段代码,用该方法创建一个字符串并且Showmessage出来?不够分我再加。
DLL文件下载地址:http://www.onlense.com/hotelreader.dll
以下是DLL文件接口说明的前部分
------------------------------
COM接口说明
1. 概述
该接口采用COM接口,在使用之前须注册HotelReader.dll COM控件
2. 属性
.AuthorizationCode
访问:读/写
类型:OLE字符串
系统授权码,用户从存储于数据库、注册表或文件中获得此值,
此值的产生请调用.属性NewAuthorizationCode
......
27 个解决方案
#1
给你up一下!!
#2
COM高手来帮帮忙啊。
#3
MARK
#4
楼上的什么意思?能说清楚点吗?
#5
我们自己用VC写一个Com控件,注册一下,就可以直接在Delphi下使用的;
不知道那个怎么就不行。
如果你自己再包一层呢?先用VC调用通过;然后用VC开发一个中间调用层。
不知道那个怎么就不行。
如果你自己再包一层呢?先用VC调用通过;然后用VC开发一个中间调用层。
#6
有用VB写的软件的, 我只想用DELPHI再写一个。
你能告诉我你是怎么调用的吗?
或者你下载我那个DLL下来看能否调用成功?
谢谢了
你能告诉我你是怎么调用的吗?
或者你下载我那个DLL下来看能否调用成功?
谢谢了
#7
大家来帮帮忙啊?郁闷哦 55555555
#8
uses
COmobj;
var
var com :OleVariant;
begin
com := CreateOLEObject('你的com对象得实例名');
com.NewAuthorizationCode //这里和vb一样得用
end;
COmobj;
var
var com :OleVariant;
begin
com := CreateOLEObject('你的com对象得实例名');
com.NewAuthorizationCode //这里和vb一样得用
end;
#9
project->Import type library ,找到你得dll ,然后create Unit ,获得HOTELREADERLib_TLB,在你得 form中uses 它,写入如下代码即可:
uses HOTELREADERLib_TLB;
var
s : WideString;
aa : TCard;
begin
aa := TCard.Create(SELF);
s := aa.NewAuthorizationCode;
showmessage(s);
end;
uses HOTELREADERLib_TLB;
var
s : WideString;
aa : TCard;
begin
aa := TCard.Create(SELF);
s := aa.NewAuthorizationCode;
showmessage(s);
end;
#10
//方法2,使用ole 方式创建,这样就不需要Import type library 即可动态创建;
uses comobj;
procedure TForm1.Button1Click(Sender: TObject);
var
s : WideString;
com : OleVariant;
begin
com := CreateOLEObject('HotelReader.Card');
showmessage(widestring(com.NewAuthorizationCode));
end;
//以上2种方法均需要先注册dll,方法为:regsvr32 hotelreader.dll
支持得接口为:
Card,Client,Clients,LockEvent,PerEvent,Server,Servers
OLE 方式访问为:
HotelReader.Card (前缀为HotelReader.接口名)
查看方法和属性得快速方法,一是采用delphi 得Import type library 后生成得lib代码,二是使用vb,在引入后按F2,选择库HOTELREADERLib即可浏览;
good luck.
uses comobj;
procedure TForm1.Button1Click(Sender: TObject);
var
s : WideString;
com : OleVariant;
begin
com := CreateOLEObject('HotelReader.Card');
showmessage(widestring(com.NewAuthorizationCode));
end;
//以上2种方法均需要先注册dll,方法为:regsvr32 hotelreader.dll
支持得接口为:
Card,Client,Clients,LockEvent,PerEvent,Server,Servers
OLE 方式访问为:
HotelReader.Card (前缀为HotelReader.接口名)
查看方法和属性得快速方法,一是采用delphi 得Import type library 后生成得lib代码,二是使用vb,在引入后按F2,选择库HOTELREADERLib即可浏览;
good luck.
#11
谢谢 S.F. 的回复
--------------------
com := CreateOLEObject('你的com对象得实例名');
com.NewAuthorizationCode //这里和vb一样得用
------------------------
这个方法我试过,我不知道怎么可以知道它COM对象的实例名,运行时老提示没有注册类别之类的。
------------------
aa := TCard.Create(SELF);
s := aa.NewAuthorizationCode;
showmessage(s);
------------------
这个方法我也试过的,如果去掉aa := TCard.Create(SELF);这句它就提示
address 0040580D in module "RF.exe".Read of address 4D004104".
你能载下我的DLL帮我试下吗?非常感谢。
在执行第一句时会提示“创建对象失败....”,然后就不执行下面的了。
如果不要
--------------------
com := CreateOLEObject('你的com对象得实例名');
com.NewAuthorizationCode //这里和vb一样得用
------------------------
这个方法我试过,我不知道怎么可以知道它COM对象的实例名,运行时老提示没有注册类别之类的。
------------------
aa := TCard.Create(SELF);
s := aa.NewAuthorizationCode;
showmessage(s);
------------------
这个方法我也试过的,如果去掉aa := TCard.Create(SELF);这句它就提示
address 0040580D in module "RF.exe".Read of address 4D004104".
你能载下我的DLL帮我试下吗?非常感谢。
在执行第一句时会提示“创建对象失败....”,然后就不执行下面的了。
如果不要
#12
首先,你如果采用我提供得方式1得话;你就必须TCard.create ;
采用方法2得话,必须拥有正确得类名,我已经提供了;并且都调试过;
另外,还得注意,你得dll并不是动态链接库,而是一个com,也不是一定需要vc之类得再封装,只是你要搞明白你得先用regsvr32 注册它到系统内,还有,你得程序要正常运行还得接上硬件,至于是什么硬件,我就不知道了,无非就是堵卡器之类得设备;
采用方法2得话,必须拥有正确得类名,我已经提供了;并且都调试过;
另外,还得注意,你得dll并不是动态链接库,而是一个com,也不是一定需要vc之类得再封装,只是你要搞明白你得先用regsvr32 注册它到系统内,还有,你得程序要正常运行还得接上硬件,至于是什么硬件,我就不知道了,无非就是堵卡器之类得设备;
#13
你如果说你对com调用一点都不懂得话,我也没有办法了,我是中秋节才休息一天上上csdn,可不想在宝贵得假期帮你调试程序:)
#14
我的DLL是要接一个IC发卡机的,但我调用它最基本的NewAuthorizationCode方法创建一字符串再SHOWMESSAGE出来都不行,执行时就出错:address 0040580D in module "RF.exe".Read of address 4D004104
你能用它来NewAuthorizationCode方法创建一字符串再SHOWMESSAGE出来吗?是用你上面那段代码吗?我的怎么不行,郁闷哦。
不管怎么样,非常感谢你!^_^
你能用它来NewAuthorizationCode方法创建一字符串再SHOWMESSAGE出来吗?是用你上面那段代码吗?我的怎么不行,郁闷哦。
不管怎么样,非常感谢你!^_^
#15
不客气:)
最直接得办法,你可以把这个问题反映给提供接口得厂商,当然,前提保证你都没有弄错,硬件设备上也没有问题,而错误在于他们。
最直接得办法,你可以把这个问题反映给提供接口得厂商,当然,前提保证你都没有弄错,硬件设备上也没有问题,而错误在于他们。
#16
或者你换台计算机,首先将dll 使用regsvr32 工具注册,再测试,不接硬件设备执行我写得代码,应该会提示设备连接失败之类得错误信息;
建议使用vmware workstation虚拟pc做测试平台
建议使用vmware workstation虚拟pc做测试平台
#17
厂商那边只提供了个VB写的软件,VB代码都不给一点,更别说DELPHI的了。
DLL用REGSVR32注册过的,也换过机器(没在虚拟机上测试),但执行时就会出错。问过好多人了,都不知道什么原因。555
DLL用REGSVR32注册过的,也换过机器(没在虚拟机上测试),但执行时就会出错。问过好多人了,都不知道什么原因。555
#18
RF.exe 是你得程序?执行得时候按f8跟踪看看,看看创建com对象是否正常,调用方法得时候是直接出现地址错误?dll文件版本正确吗?用vb调用试试看?
#19
我不会VB
procedure TForm1.Button1Click(Sender: TObject);
var
a:TCard;
s:Widestring;
begin
a:=TCard.Create(self);
s:=a.NewAuthorizationCode;
showmessage(s);
end;
这段代码执行时错误出现在HOTELREADERLib_TLB单元的函数Get_NewAuthorizationCode上
function TCard.Get_NewAuthorizationCode: WideString;
begin
Result := DefaultInterface.NewAuthorizationCode;
end;
错误提示是:暂不支持的门锁类型或创建对象失败或内存不足。
而代码改成这样则没错误提示
procedure TForm1.Button1Click(Sender: TObject);
var
a:TCard;
s:Widestring;
begin
a:=TCard.Create(self);
end;
为什么一调用它的方法就会出错了呢?
procedure TForm1.Button1Click(Sender: TObject);
var
a:TCard;
s:Widestring;
begin
a:=TCard.Create(self);
s:=a.NewAuthorizationCode;
showmessage(s);
end;
这段代码执行时错误出现在HOTELREADERLib_TLB单元的函数Get_NewAuthorizationCode上
function TCard.Get_NewAuthorizationCode: WideString;
begin
Result := DefaultInterface.NewAuthorizationCode;
end;
错误提示是:暂不支持的门锁类型或创建对象失败或内存不足。
而代码改成这样则没错误提示
procedure TForm1.Button1Click(Sender: TObject);
var
a:TCard;
s:Widestring;
begin
a:=TCard.Create(self);
end;
为什么一调用它的方法就会出错了呢?
#20
用过一个dll的com,现将我的用法写出来,希望能对你有帮助:
1.注册com的dll文件:在运行里使用regsvr32命令:regsvr32 xxxx.dll
2.在delphi中导入dll文件,生成TLB文件,并加入uses中
3.定义变量,注意是一个接口变量,类似Ixxx的一个类,查查tlb的文件找找看
4.创建接口对象:变量名:=coxxx.create;
现在就可以使用这个接口了,如果需有客户端支持,请一并配制好
1.注册com的dll文件:在运行里使用regsvr32命令:regsvr32 xxxx.dll
2.在delphi中导入dll文件,生成TLB文件,并加入uses中
3.定义变量,注意是一个接口变量,类似Ixxx的一个类,查查tlb的文件找找看
4.创建接口对象:变量名:=coxxx.create;
现在就可以使用这个接口了,如果需有客户端支持,请一并配制好
#21
procedure TForm1.Button1Click(Sender: TObject);
var
a:ICard;
s:Widestring;
begin
a:=coCard.Create;
s:=a.NewAuthorizationCode;
showmessage(s);
end;
也是出现上面那种错误哦,5555
var
a:ICard;
s:Widestring;
begin
a:=coCard.Create;
s:=a.NewAuthorizationCode;
showmessage(s);
end;
也是出现上面那种错误哦,5555
#22
错误提示是:暂不支持的门锁类型或创建对象失败或内存不足。
这句是com对象提示得,表示你调用没有问题;问题应该是你没用对;也许使用newauthorizationcode方法之前你还得指定访问得硬件得相关属性
这句是com对象提示得,表示你调用没有问题;问题应该是你没用对;也许使用newauthorizationcode方法之前你还得指定访问得硬件得相关属性
#23
嗯,可说明上是说直接调用的。
--------------------------------
COM接口说明
1. 概述
该接口采用COM接口,在使用之前须注册HotelReader.dll COM控件
2. 属性
.AuthorizationCode
访问:读/写
类型:OLE字符串
系统授权码,用户从存储于数据库、注册表或文件中获得此值,
此值的产生请调用.属性NewAuthorizationCode
.......
-----------------------------------------
--------------------------------
COM接口说明
1. 概述
该接口采用COM接口,在使用之前须注册HotelReader.dll COM控件
2. 属性
.AuthorizationCode
访问:读/写
类型:OLE字符串
系统授权码,用户从存储于数据库、注册表或文件中获得此值,
此值的产生请调用.属性NewAuthorizationCode
.......
-----------------------------------------
#24
建议你问问厂商,这个办法会很有效
#25
嗯,好的。明天上班再问厂商那边。
谢谢 S.F.(chinasf.cnblogs.com) .能告诉我你的QQ号码吗?我QQ的是231221
再过半小时再结贴吧
谢谢 S.F.(chinasf.cnblogs.com) .能告诉我你的QQ号码吗?我QQ的是231221
再过半小时再结贴吧
#26
我得qq:410000
认识你很高兴
认识你很高兴
#27
呵呵,标记下,到时候学习
#1
给你up一下!!
#2
COM高手来帮帮忙啊。
#3
MARK
#4
楼上的什么意思?能说清楚点吗?
#5
我们自己用VC写一个Com控件,注册一下,就可以直接在Delphi下使用的;
不知道那个怎么就不行。
如果你自己再包一层呢?先用VC调用通过;然后用VC开发一个中间调用层。
不知道那个怎么就不行。
如果你自己再包一层呢?先用VC调用通过;然后用VC开发一个中间调用层。
#6
有用VB写的软件的, 我只想用DELPHI再写一个。
你能告诉我你是怎么调用的吗?
或者你下载我那个DLL下来看能否调用成功?
谢谢了
你能告诉我你是怎么调用的吗?
或者你下载我那个DLL下来看能否调用成功?
谢谢了
#7
大家来帮帮忙啊?郁闷哦 55555555
#8
uses
COmobj;
var
var com :OleVariant;
begin
com := CreateOLEObject('你的com对象得实例名');
com.NewAuthorizationCode //这里和vb一样得用
end;
COmobj;
var
var com :OleVariant;
begin
com := CreateOLEObject('你的com对象得实例名');
com.NewAuthorizationCode //这里和vb一样得用
end;
#9
project->Import type library ,找到你得dll ,然后create Unit ,获得HOTELREADERLib_TLB,在你得 form中uses 它,写入如下代码即可:
uses HOTELREADERLib_TLB;
var
s : WideString;
aa : TCard;
begin
aa := TCard.Create(SELF);
s := aa.NewAuthorizationCode;
showmessage(s);
end;
uses HOTELREADERLib_TLB;
var
s : WideString;
aa : TCard;
begin
aa := TCard.Create(SELF);
s := aa.NewAuthorizationCode;
showmessage(s);
end;
#10
//方法2,使用ole 方式创建,这样就不需要Import type library 即可动态创建;
uses comobj;
procedure TForm1.Button1Click(Sender: TObject);
var
s : WideString;
com : OleVariant;
begin
com := CreateOLEObject('HotelReader.Card');
showmessage(widestring(com.NewAuthorizationCode));
end;
//以上2种方法均需要先注册dll,方法为:regsvr32 hotelreader.dll
支持得接口为:
Card,Client,Clients,LockEvent,PerEvent,Server,Servers
OLE 方式访问为:
HotelReader.Card (前缀为HotelReader.接口名)
查看方法和属性得快速方法,一是采用delphi 得Import type library 后生成得lib代码,二是使用vb,在引入后按F2,选择库HOTELREADERLib即可浏览;
good luck.
uses comobj;
procedure TForm1.Button1Click(Sender: TObject);
var
s : WideString;
com : OleVariant;
begin
com := CreateOLEObject('HotelReader.Card');
showmessage(widestring(com.NewAuthorizationCode));
end;
//以上2种方法均需要先注册dll,方法为:regsvr32 hotelreader.dll
支持得接口为:
Card,Client,Clients,LockEvent,PerEvent,Server,Servers
OLE 方式访问为:
HotelReader.Card (前缀为HotelReader.接口名)
查看方法和属性得快速方法,一是采用delphi 得Import type library 后生成得lib代码,二是使用vb,在引入后按F2,选择库HOTELREADERLib即可浏览;
good luck.
#11
谢谢 S.F. 的回复
--------------------
com := CreateOLEObject('你的com对象得实例名');
com.NewAuthorizationCode //这里和vb一样得用
------------------------
这个方法我试过,我不知道怎么可以知道它COM对象的实例名,运行时老提示没有注册类别之类的。
------------------
aa := TCard.Create(SELF);
s := aa.NewAuthorizationCode;
showmessage(s);
------------------
这个方法我也试过的,如果去掉aa := TCard.Create(SELF);这句它就提示
address 0040580D in module "RF.exe".Read of address 4D004104".
你能载下我的DLL帮我试下吗?非常感谢。
在执行第一句时会提示“创建对象失败....”,然后就不执行下面的了。
如果不要
--------------------
com := CreateOLEObject('你的com对象得实例名');
com.NewAuthorizationCode //这里和vb一样得用
------------------------
这个方法我试过,我不知道怎么可以知道它COM对象的实例名,运行时老提示没有注册类别之类的。
------------------
aa := TCard.Create(SELF);
s := aa.NewAuthorizationCode;
showmessage(s);
------------------
这个方法我也试过的,如果去掉aa := TCard.Create(SELF);这句它就提示
address 0040580D in module "RF.exe".Read of address 4D004104".
你能载下我的DLL帮我试下吗?非常感谢。
在执行第一句时会提示“创建对象失败....”,然后就不执行下面的了。
如果不要
#12
首先,你如果采用我提供得方式1得话;你就必须TCard.create ;
采用方法2得话,必须拥有正确得类名,我已经提供了;并且都调试过;
另外,还得注意,你得dll并不是动态链接库,而是一个com,也不是一定需要vc之类得再封装,只是你要搞明白你得先用regsvr32 注册它到系统内,还有,你得程序要正常运行还得接上硬件,至于是什么硬件,我就不知道了,无非就是堵卡器之类得设备;
采用方法2得话,必须拥有正确得类名,我已经提供了;并且都调试过;
另外,还得注意,你得dll并不是动态链接库,而是一个com,也不是一定需要vc之类得再封装,只是你要搞明白你得先用regsvr32 注册它到系统内,还有,你得程序要正常运行还得接上硬件,至于是什么硬件,我就不知道了,无非就是堵卡器之类得设备;
#13
你如果说你对com调用一点都不懂得话,我也没有办法了,我是中秋节才休息一天上上csdn,可不想在宝贵得假期帮你调试程序:)
#14
我的DLL是要接一个IC发卡机的,但我调用它最基本的NewAuthorizationCode方法创建一字符串再SHOWMESSAGE出来都不行,执行时就出错:address 0040580D in module "RF.exe".Read of address 4D004104
你能用它来NewAuthorizationCode方法创建一字符串再SHOWMESSAGE出来吗?是用你上面那段代码吗?我的怎么不行,郁闷哦。
不管怎么样,非常感谢你!^_^
你能用它来NewAuthorizationCode方法创建一字符串再SHOWMESSAGE出来吗?是用你上面那段代码吗?我的怎么不行,郁闷哦。
不管怎么样,非常感谢你!^_^
#15
不客气:)
最直接得办法,你可以把这个问题反映给提供接口得厂商,当然,前提保证你都没有弄错,硬件设备上也没有问题,而错误在于他们。
最直接得办法,你可以把这个问题反映给提供接口得厂商,当然,前提保证你都没有弄错,硬件设备上也没有问题,而错误在于他们。
#16
或者你换台计算机,首先将dll 使用regsvr32 工具注册,再测试,不接硬件设备执行我写得代码,应该会提示设备连接失败之类得错误信息;
建议使用vmware workstation虚拟pc做测试平台
建议使用vmware workstation虚拟pc做测试平台
#17
厂商那边只提供了个VB写的软件,VB代码都不给一点,更别说DELPHI的了。
DLL用REGSVR32注册过的,也换过机器(没在虚拟机上测试),但执行时就会出错。问过好多人了,都不知道什么原因。555
DLL用REGSVR32注册过的,也换过机器(没在虚拟机上测试),但执行时就会出错。问过好多人了,都不知道什么原因。555
#18
RF.exe 是你得程序?执行得时候按f8跟踪看看,看看创建com对象是否正常,调用方法得时候是直接出现地址错误?dll文件版本正确吗?用vb调用试试看?
#19
我不会VB
procedure TForm1.Button1Click(Sender: TObject);
var
a:TCard;
s:Widestring;
begin
a:=TCard.Create(self);
s:=a.NewAuthorizationCode;
showmessage(s);
end;
这段代码执行时错误出现在HOTELREADERLib_TLB单元的函数Get_NewAuthorizationCode上
function TCard.Get_NewAuthorizationCode: WideString;
begin
Result := DefaultInterface.NewAuthorizationCode;
end;
错误提示是:暂不支持的门锁类型或创建对象失败或内存不足。
而代码改成这样则没错误提示
procedure TForm1.Button1Click(Sender: TObject);
var
a:TCard;
s:Widestring;
begin
a:=TCard.Create(self);
end;
为什么一调用它的方法就会出错了呢?
procedure TForm1.Button1Click(Sender: TObject);
var
a:TCard;
s:Widestring;
begin
a:=TCard.Create(self);
s:=a.NewAuthorizationCode;
showmessage(s);
end;
这段代码执行时错误出现在HOTELREADERLib_TLB单元的函数Get_NewAuthorizationCode上
function TCard.Get_NewAuthorizationCode: WideString;
begin
Result := DefaultInterface.NewAuthorizationCode;
end;
错误提示是:暂不支持的门锁类型或创建对象失败或内存不足。
而代码改成这样则没错误提示
procedure TForm1.Button1Click(Sender: TObject);
var
a:TCard;
s:Widestring;
begin
a:=TCard.Create(self);
end;
为什么一调用它的方法就会出错了呢?
#20
用过一个dll的com,现将我的用法写出来,希望能对你有帮助:
1.注册com的dll文件:在运行里使用regsvr32命令:regsvr32 xxxx.dll
2.在delphi中导入dll文件,生成TLB文件,并加入uses中
3.定义变量,注意是一个接口变量,类似Ixxx的一个类,查查tlb的文件找找看
4.创建接口对象:变量名:=coxxx.create;
现在就可以使用这个接口了,如果需有客户端支持,请一并配制好
1.注册com的dll文件:在运行里使用regsvr32命令:regsvr32 xxxx.dll
2.在delphi中导入dll文件,生成TLB文件,并加入uses中
3.定义变量,注意是一个接口变量,类似Ixxx的一个类,查查tlb的文件找找看
4.创建接口对象:变量名:=coxxx.create;
现在就可以使用这个接口了,如果需有客户端支持,请一并配制好
#21
procedure TForm1.Button1Click(Sender: TObject);
var
a:ICard;
s:Widestring;
begin
a:=coCard.Create;
s:=a.NewAuthorizationCode;
showmessage(s);
end;
也是出现上面那种错误哦,5555
var
a:ICard;
s:Widestring;
begin
a:=coCard.Create;
s:=a.NewAuthorizationCode;
showmessage(s);
end;
也是出现上面那种错误哦,5555
#22
错误提示是:暂不支持的门锁类型或创建对象失败或内存不足。
这句是com对象提示得,表示你调用没有问题;问题应该是你没用对;也许使用newauthorizationcode方法之前你还得指定访问得硬件得相关属性
这句是com对象提示得,表示你调用没有问题;问题应该是你没用对;也许使用newauthorizationcode方法之前你还得指定访问得硬件得相关属性
#23
嗯,可说明上是说直接调用的。
--------------------------------
COM接口说明
1. 概述
该接口采用COM接口,在使用之前须注册HotelReader.dll COM控件
2. 属性
.AuthorizationCode
访问:读/写
类型:OLE字符串
系统授权码,用户从存储于数据库、注册表或文件中获得此值,
此值的产生请调用.属性NewAuthorizationCode
.......
-----------------------------------------
--------------------------------
COM接口说明
1. 概述
该接口采用COM接口,在使用之前须注册HotelReader.dll COM控件
2. 属性
.AuthorizationCode
访问:读/写
类型:OLE字符串
系统授权码,用户从存储于数据库、注册表或文件中获得此值,
此值的产生请调用.属性NewAuthorizationCode
.......
-----------------------------------------
#24
建议你问问厂商,这个办法会很有效
#25
嗯,好的。明天上班再问厂商那边。
谢谢 S.F.(chinasf.cnblogs.com) .能告诉我你的QQ号码吗?我QQ的是231221
再过半小时再结贴吧
谢谢 S.F.(chinasf.cnblogs.com) .能告诉我你的QQ号码吗?我QQ的是231221
再过半小时再结贴吧
#26
我得qq:410000
认识你很高兴
认识你很高兴
#27
呵呵,标记下,到时候学习