Winapi VB6:运行时错误';13';:使用int设置和int时类型不匹配

Winapi VB6:运行时错误';13';:使用int设置和int时类型不匹配,winapi,vb6,Winapi,Vb6,我对VB6编程并不陌生,但我也不是这方面的高手。希望有人能帮我解决一个关于类型不匹配错误的问题,这个错误是我在尝试用函数返回的int设置int变量时遇到的 我试图设置的整数定义为: Global AICROSSDOCKStatus As Integer 现在,当我尝试进行此调用时,我得到运行时错误13 AICROSSDOCKStatus = ProcessQuery(iocode, pb, AICROSSDOCBOLFN, "") 我已经逐行调试了程序。ProcessQuery函数获取并返回

我对VB6编程并不陌生,但我也不是这方面的高手。希望有人能帮我解决一个关于类型不匹配错误的问题,这个错误是我在尝试用函数返回的int设置int变量时遇到的

我试图设置的整数定义为:

Global AICROSSDOCKStatus As Integer
现在,当我尝试进行此调用时,我得到运行时错误13

AICROSSDOCKStatus = ProcessQuery(iocode, pb, AICROSSDOCBOLFN, "")
我已经逐行调试了程序。ProcessQuery函数获取并返回期望的整数,但当分配给AICROSSDOCKStatus时失败

另一方面,我还尝试对ProcessQuery执行一个CInt(),得到相同的结果

有没有人对我可以尝试什么有什么建议

编辑: 下面是ProcessQuery的定义

Function ProcessQuery(icode As Integer, pb As ADODB.Recordset, TableName As String, sql$) As Integer
编辑2:我无法告诉你为什么这样做。我继承了代码库。哎呀


Function ProcessQuery(icode As Integer, pb As ADODB.Recordset, TableName As String, sql$) As Integer
    ProcessQuery = ProcessQuery1(icode, pb, TableName, sql$)
End Function

好吧,我不能说我知道发生了什么,但这里有一个可能的调试步骤:首先分配一个本地定义的整数,然后将AICROSSDOCKStatus分配给本地int。如果运行时错误13发生在第一次分配时,则会发生一些非常奇怪的事情-如果它发生在第二次分配时,然后,您可能希望查看是否有任何全局变量是可能超出边界的数组


祝你好运

尝试以下操作,看看该值是否为int

msgbox ProcessQuery(iocode, pb, AICROSSDOCBOLFN, "")
我确信它不会是int&这就是它失败的结果。我的猜测是,它将包含字符,这使它成为非数值


您可以尝试对结果执行
IsNumeric()
函数以检查它是否为数值。

尝试使用中间变量,该变量应采用函数中的任何类型。它至少应该允许您调查返回值的实际类型。

这将告诉您函数实际返回的类型的名称:

MsgBox TypeName(ProcessQuery(...)) 
在任何情况下,将ProcessQuery()函数限制为int都可能有助于从一开始就防止此类错误:

Function ProcessQuery(whatever arguments) As Integer
  ''// ...
End Function

API返回一个16位的VB6整数有点不寻常。通常,翻译C函数原型的人会将C“int”与VB6整数混淆,而等价物在VB6中实际上是长的。

问题不在于它在函数返回时遇到问题,而在于通过引用传递的参数。我需要一个记录集(pb)通过引用传递,但我已经声明(pb)为记录。

你能发布ProcessQuery的定义吗?你能发布ProcessQuery的完整代码而不仅仅是签名吗?哇。有些人编写代码时,好像维护程序员是一个知道自己住在哪里的暴力精神病患者。其他人编写的代码会把任何维护者变成一个暴力的精神病患者。ProcessQuery1是第二学校的产品。介绍Msgbox:简单的错误处理方法!毕竟,Err.Raise和error处理程序太复杂了。你现在需要你的错误,需要他们在你面前!!砰!现在采用这种新的错误处理“最佳实践”是非常关键的!!(注意:实际结果可能会有所不同。使用MsgBox作为错误处理策略实际上可能会导致调试时间延长、挫折感增加、胆固醇升高和脱发。在罕见的CAE中,也可能会发生因使用勺子等餐具挖眼睛而导致的失明)。当我在ProcessQuery1上的ProcessQuery中尝试此操作时,我得到了预期的“整数”。当我尝试TypeName(ProcessQuery(…)时,我得到了错误。然后我猜错误发生在ProcessQuery1()中。取消对“On Error Goto”语句的注释以查看其位置。顺便说一下,函数ProcessQuery1()是。。。委婉地说,相当混乱。类型不匹配并不是它唯一的问题。你不是在开玩笑说它有问题。它通过ProcessQuery1完成,在ProcessQuery中到达“End Function”时出错。因为ProcessQuery()和ProcessQuery1()似乎具有完全相同的签名。。。为了好玩,您可以在代码中直接调用ProcessQuery1()吗?因此错误实际上发生在ProcessQuery1()函数中。你是否对“错误”陈述进行了注释?Strinc连接是用VB中的“&”操作符完成的,而不是用“+”。可能是这样的(“sql=”select*from“+etc.etc.”)。
Function ProcessQuery(whatever arguments) As Integer
  ''// ...
End Function