关于一个dll组件注册时的怪现象

xiao_bai 2013-02-25 10:13:49
开发环境: PB 9.0.3
系统环境: Win XP ,sp3
调用dll文件: taxcardx.dll
现象描述:taxcardx.dll是关于发票的组件接口程序,因为某些原因,必须要先安装发票开票客户端程序并且只能在发票开票系统安装目录下注册。我用regsvr32 进行组件注册,提示成功。然后我想在pb开发环境中,通过ole控件中->Insert Control标签中找到这个组件然后使用就行,但是我找了半天竟然发现没有这个组件。于是我试着点击Register New按钮再注册一下,结果有了如下提示:
taxcardx.dll is not marded as supporting self-registration.
However ,the function "DllRegisterServer" was found.
Do you wish to attempt to register this file as a control ?

我点“确定”按钮之后发现还是没有相应的组件的图标显示。
我又做了如下的努力:
1.通过查注册表,我确认该组件已经注册了。
2.我通过regsvr32 -u卸载这个组件,在pb中仍然注册不了,提示如上面所示的。
3.该组件包含大量的函数和属性值的操作,无法通过声明外部函数的方式调用。
4.在delphi 7中可以通过导入ActiveX组件的方式加载这个组件
5.我通过在程序中用ConnectToNewObject方法调用组件中的类,结果返回不能连接对象的错误码(-4)

至此,小弟思路中断了,不知道该如何进行下一步的工作,请诸位大侠帮忙!
...全文
1601 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
liubocy 2013-06-02
  • 打赏
  • 举报
回复
用DEPENDS.EXE这个工具来查看TaxCardX.dll的依赖文件。肯定是少了什么文件的 以前用pb115做个COM组件(用来解析UTF16编码的文件)让低版本调用时,碰到过类似的问题。
xiao_bai 2013-03-01
  • 打赏
  • 举报
回复
引用 17 楼 pnqn520 的回复:
还有一种可能是你没有安装VC++2005环境运行库的缘故,导致注册失败。
没啥关系
fuxiaoyang13 2013-03-01
  • 打赏
  • 举报
回复
引用 14 楼 xiao_bai 的回复:
学习了!!!!
pnqn520 2013-02-28
  • 打赏
  • 举报
回复
还有一种可能是你没有安装VC++2005环境运行库的缘故,导致注册失败。
xiao_bai 2013-02-27
  • 打赏
  • 举报
回复
我写的代码和上面的几乎完全一样,但是我的调用就是不成功!返回错误码为 : -4 。 由这篇解答的时间 2008-6-9 推测: 当时这个dll文件没加密,因此,随便一个路径都能注册。 当时这个dll文件直接ole调用就可以实现。 但,杯具的是现在这些都是不可能的了。 我决定再做一次努力: 重装系统 重新安装网络发票程序以及注册组件 再不行我只好放弃pb用其他语言实现了。
xiao_bai 2013-02-26
  • 打赏
  • 举报
回复
资源已上传,链接地址如下: http://download.csdn.net/detail/xiao_bai/5088378 感谢 xiajinxian 指导
A啦Dbit 2013-02-26
  • 打赏
  • 举报
回复
引用 5 楼 xiao_bai 的回复:
引用 4 楼 xiajinxian 的回复:看一下你的DLL其它人能不能引用... 我不知道怎么传上来,郁闷~~
发到你的资源里,然后把地址发出来
softvery 2013-02-26
  • 打赏
  • 举报
回复
是的,就是这个了,百度开始固步自封了,外面都没有办法打开他的连接,不过点开后上面有个 点击这里继续访问您选择的百度文库结果>> 再点击一下就可以进入了,结果应该和你搜索的是一样的。
xiao_bai 2013-02-26
  • 打赏
  • 举报
回复
xiao_bai 2013-02-26
  • 打赏
  • 举报
回复
引用 11 楼 softvery 的回复:
这个DLL并不是像你想象中那样用的,看一下这个文档: PB调用金税组件接口
给我的链接估计是百度判定为盗链无法打开,不过我去搜了一下,得到这样一个结论
xiao_bai 2013-02-26
  • 打赏
  • 举报
回复
引用 9 楼 xiajinxian 的回复:
我试了一下注册都不成功... 下面的就更不能继续了
我估计这个dll文件加密了,必须要在网络发票安装目录下注册才能成功。所以我在现象描述中说了:因为某些原因,必须要先安装发票开票客户端程序并且只能在发票开票系统安装目录下注册。
softvery 2013-02-26
  • 打赏
  • 举报
回复
这个DLL并不是像你想象中那样用的,看一下这个文档: PB调用金税组件接口
softvery 2013-02-26
  • 打赏
  • 举报
回复
嗯,确实是无法注册
A啦Dbit 2013-02-26
  • 打赏
  • 举报
回复

我试了一下注册都不成功...
下面的就更不能继续了
A啦Dbit 2013-02-25
  • 打赏
  • 举报
回复
看一下你的DLL其它人能不能引用...
pcwe2002 2013-02-25
  • 打赏
  • 举报
回复
两种方式,一种是你在delphi中查看com组件的类名,类名应该是类似 classobj.myobj的格式,然后用connecttonewobject连接这个类, 第二种如果你实在找不到方法,就用delphi把它的方法封装为dll,然后在pb中调用delphi的方法
xiao_bai 2013-02-25
  • 打赏
  • 举报
回复
引用 1 楼 xiajinxian 的回复:
可以把你的DLL发出来...让大家都看看
都已经编译好的组件,我发上来有用吗?
A啦Dbit 2013-02-25
  • 打赏
  • 举报
回复
可以把你的DLL发出来...让大家都看看
xiao_bai 2013-02-25
  • 打赏
  • 举报
回复
引用 3 楼 pcwe2002 的回复:
两种方式,一种是你在delphi中查看com组件的类名,类名应该是类似 classobj.myobj的格式,然后用connecttonewobject连接这个类, 第二种如果你实在找不到方法,就用delphi把它的方法封装为dll,然后在pb中调用delphi的方法
对于方法1,我已做测试,用ConnectToNewObject方法调用组件中的类,结果返回-4 Could not connect to object 对于方法2,本来调用的就是dll文件,装入delphi后是个控件形式,但内部的结构除了函数名和属性能猜出外其余都不知道啊,请指教具体实现细节。 再者,我对这种方法的稳定性感觉不乐观啊。我感觉这个组件本来就不稳定,不然不会出现注册时的问题,我怕运行后再出意外,不知还有什么更好的方法吗?
xiao_bai 2013-02-25
  • 打赏
  • 举报
回复
引用 4 楼 xiajinxian 的回复:
看一下你的DLL其它人能不能引用...
我不知道怎么传上来,郁闷~~

680

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder API 调用
社区管理员
  • API 调用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧