奇怪。。。调用DLL,参数不可选。但函数不需要参数啊。前期绑定可以。后期绑定就错误了

小噤 2017-09-03 09:31:39

昨天遇到个问题。想不通为什么。
有位网友说后期绑定可能是其他重名库,发生这种情况一般都是同一个库,不同版本造成的。
但搜索了整个注册表。也没有重名的。也弄了一台新电脑只安装这个软件。还是一样。
看看各位大神有没有经历过这样的事情喽。
函数

前期

后期

试着在括号里加个“” 空字符串,提示类型不符。加True Flase之类的,提示自动化失败
...全文
681 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
小噤 2017-09-13
  • 打赏
  • 举报
回复
引用 17 楼 xiu100 的回复:
这个不是什么dll,32位,64位的问题, dim BtApp 与 dim BtApp as Object 都没有问题 而是“后期”绑定 是不能直接访问对象的属性、方法、事件、常量 “后期”绑定 的好处就是 不受版本的限制
道理都懂.可问题是为什么后期就用不了其中一个函数....
H小虎H 2017-09-12
  • 打赏
  • 举报
回复
这个不是什么dll,32位,64位的问题, dim BtApp 与 dim BtApp as Object 都没有问题 而是“后期”绑定 是不能直接访问对象的属性、方法、事件、常量 “后期”绑定 的好处就是 不受版本的限制
赵4老师 2017-09-05
  • 打赏
  • 举报
回复
严格区分32位/64位COM DLL!
小噤 2017-09-05
  • 打赏
  • 举报
回复
引用 11 楼 zhao4zhong1 的回复:
学会使用dumpbin.exe /exports xxx.dll查看xxx.dll的导出函数。 学会使用OleView.exe查看COM DLL的IDL信息。
这个和在VB6里面查看定义是一样的. [id(0x00000005), helpstring("Connects to the the Seagull License Server")] HRESULT Connect([out, retval] VARIANT_BOOL* retval);
赵4老师 2017-09-05
  • 打赏
  • 举报
回复
学会使用dumpbin.exe /exports xxx.dll查看xxx.dll的导出函数。 学会使用OleView.exe查看COM DLL的IDL信息。
舉杯邀明月 2017-09-05
  • 打赏
  • 举报
回复
引用 15 楼 qq574221329 的回复:
. . . . . . . . . . 特意下载个VS2015用VB.NET / C# 都试了. 问题都是后期绑定BT时错误. 结贴喽.夜路走多总会遇到鬼.编程多了也总会遇到无法理解的代码 谢谢您了
这更能说明,是那个BT接口有问题了啊。
小噤 2017-09-05
  • 打赏
  • 举报
回复
引用 10 楼 Chen8013 的回复:
[quote=引用 9 楼 qq574221329 的回复:] [quote=引用 8 楼 Chen8013 的回复:] 按这些“资料信息”,Connect( )函数没有参数的啊!!! 居然出现这种问题…… 你试试传 BtApp(就是“对象自己”),如果问题依旧,我是完全没辙了。
嗯.还是不行呢.谢谢给的意见. 按您的经验.出现这种情况. 有可能是这个Bt自身的问题.还是VB6的问题呢,还是可能其他. 还好这个函数只是看到了.我实际并不需要用到.只是感觉奇怪,再挂两天.没有人解决就贴了[/quote] 要说凭“经验”或“直觉”来说的话,我只怀疑是 BT模块 的问题。 你这个帖子中这样的问题,我自己从来没遇到过。 在网上也看过不少的东西了,也从来没有谁说过有类似这样的问题。 [/quote] 特意下载个VS2015用VB.NET / C# 都试了. 问题都是后期绑定BT时错误. 结贴喽.夜路走多总会遇到鬼.编程多了也总会遇到无法理解的代码 谢谢您了
小噤 2017-09-05
  • 打赏
  • 举报
回复
引用 13 楼 zhao4zhong1 的回复:
严格区分32位/64位COM DLL!
32位的软件,32位的系统,32位的VB6.... 好吧.我没有那种究根问底的精神. 谢谢您了.结贴了
小噤 2017-09-04
  • 打赏
  • 举报
回复
引用 8 楼 Chen8013 的回复:
按这些“资料信息”,Connect( )函数没有参数的啊!!! 居然出现这种问题…… 你试试传 BtApp(就是“对象自己”),如果问题依旧,我是完全没辙了。
嗯.还是不行呢.谢谢给的意见. 按您的经验.出现这种情况. 有可能是这个Bt自身的问题.还是VB6的问题呢,还是可能其他. 还好这个函数只是看到了.我实际并不需要用到.只是感觉奇怪,再挂两天.没有人解决就贴了
舉杯邀明月 2017-09-04
  • 打赏
  • 举报
回复
引用 9 楼 qq574221329 的回复:
[quote=引用 8 楼 Chen8013 的回复:] 按这些“资料信息”,Connect( )函数没有参数的啊!!! 居然出现这种问题…… 你试试传 BtApp(就是“对象自己”),如果问题依旧,我是完全没辙了。
嗯.还是不行呢.谢谢给的意见. 按您的经验.出现这种情况. 有可能是这个Bt自身的问题.还是VB6的问题呢,还是可能其他. 还好这个函数只是看到了.我实际并不需要用到.只是感觉奇怪,再挂两天.没有人解决就贴了[/quote] 要说凭“经验”或“直觉”来说的话,我只怀疑是 BT模块 的问题。 你这个帖子中这样的问题,我自己从来没遇到过。 在网上也看过不少的东西了,也从来没有谁说过有类似这样的问题。
赵4老师 2017-09-03
  • 打赏
  • 举报
回复
在64位Windows下: 64位exe和dll在目录c:\windows\system32目录下; 32位exe和dll在目录c:\windows\syswow64目录下; 所以要注意: 在win64位系统下注册32位ocx或dll需要将32位ocx或dll拷贝到c:\windows\syswow64\目录下。 且注册要用c:\windows\syswow64\regsvr32 xxxxxxx.ocx或dll
舉杯邀明月 2017-09-03
  • 打赏
  • 举报
回复
你的变量声明不对吧! 试试: dim BtApp as Object
舉杯邀明月 2017-09-03
  • 打赏
  • 举报
回复
按这些“资料信息”,Connect( )函数没有参数的啊!!! 居然出现这种问题…… 你试试传 BtApp(就是“对象自己”),如果问题依旧,我是完全没辙了。
小噤 2017-09-03
  • 打赏
  • 举报
回复
引用 6 楼 Chen8013 的回复:
还有一个:
你的“后期”绑定的代码,用一个新工程来测试一下。这个工程中,不要去引用它的那个COM。

引用的时候查看定义.就是贴子的第一个图片.
新工程测试.问题依旧
官方函数说明如下. 会不会是这个自动化接口本身就有问题?不明白...
舉杯邀明月 2017-09-03
  • 打赏
  • 举报
回复
还有一个: 你的“后期”绑定的代码,用一个新工程来测试一下。这个工程中,不要去引用它的那个COM。
舉杯邀明月 2017-09-03
  • 打赏
  • 举报
回复
引用 3 楼 qq574221329 的回复:
这样子也是不行呢. 这个接口其他命令都可以 就这一句不行 [quote=引用 1 楼 Chen8013 的回复:] 你的变量声明不对吧! 试试: dim BtApp as Object
[/quote] 哦,原来是Connect ( )有问题,我还以为是 CreateObject( )出问题呢。 你在“引用”COM的情况下,在 Connect 上点鼠标右键、再点“定义”,   看看对象浏览器中对那个函数如何说明。 或者直接看那个COM的技术文档,看它的Connect( )要如何调用,按这个“要求”来调用吧。
小噤 2017-09-03
  • 打赏
  • 举报
回复
引用 2 楼 zhao4zhong1 的回复:
在64位Windows下: 64位exe和dll在目录c:\windows\system32目录下; 32位exe和dll在目录c:\windows\syswow64目录下; 所以要注意: 在win64位系统下注册32位ocx或dll需要将32位ocx或dll拷贝到c:\windows\syswow64\目录下。 且注册要用c:\windows\syswow64\regsvr32 xxxxxxx.ocx或dll
赵老师.....这次的复制粘贴对我没效果啊. 我是直接引用程序的COM接口的。 不是一个DL文件 这个接口别的命令也是OK的,就这一句不可以 来点真货吧
小噤 2017-09-03
  • 打赏
  • 举报
回复
这样子也是不行呢. 这个接口其他命令都可以 就这一句不行

引用 1 楼 Chen8013 的回复:
你的变量声明不对吧!

试试:
dim BtApp as Object

1,486

社区成员

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

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