Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 调试错误的DLL调用约定_Vba_Ms Access_Dll - Fatal编程技术网

Vba 调试错误的DLL调用约定

Vba 调试错误的DLL调用约定,vba,ms-access,dll,Vba,Ms Access,Dll,如何调试MSAccess VBA代码中错误的DLL调用约定错误 我对模块中的函数做了一些更改,然后得到了错误。如何调试它以找到原因 此错误出现在函数的Exit function语句中。是否检查了引用并进行了反编译 "C:\Program Files\Microsoft Office\Office\MSACCESS.EXE" "d:\My Documents\access\mayapp.mdb" /decompile 另请参见:

如何调试MSAccess VBA代码中错误的DLL调用约定错误

我对模块中的函数做了一些更改,然后得到了错误。如何调试它以找到原因


此错误出现在函数的Exit function语句中。

是否检查了引用并进行了反编译

"C:\Program Files\Microsoft Office\Office\MSACCESS.EXE" 
                                "d:\My Documents\access\mayapp.mdb" /decompile
另请参见:


检查代码中的引用

Dim ref As Reference
Dim sMsg As String

''Available since 2010
If BrokenReference Then
    For Each ref In References
        ''Available since at least 2000
        If ref.IsBroken Then
            sMsg = sMsg & "Ref Name: " & ref.Name
            'Also, if required
            'sMsg = sMsg & vbCrLf & "Built In: " & ref.BuiltIn
            'sMsg = sMsg & vbCrLf & "Full Path: " & ref.FullPath
            'sMsg = sMsg & vbCrLf & "GUID: " & ref.Guid
            'sMsg = sMsg & vbCrLf & "Kind: " & ref.Kind
            'sMsg = sMsg & vbCrLf & "Major (version number): " & ref.Major
            'sMsg = sMsg & vbCrLf & "Minor (version number): " & ref.Minor
            sMsg = sMsg & vbCrLf & "=================================" & vbCrLf
        End If
    Next
    MsgBox sMsg
End If

我刚刚在Excel中得到了这个,不知道以前是否有人得到过它。我的解决方案是绕过对我自己DLL的引用,然后单击“编译”。

我以前在Excel中看到过,没有任何外部引用。正如您的问题一样,它发生在一个退出函数调用上。Excel似乎没有/decompile选项,但我通过在我的一个类模块中进行更改,从“调试”菜单执行编译,然后撤消更改来修复它。我怀疑我的一个类模块由于某种原因编译错误,Excel不会重新编译,除非它认为发生了变化。

我使用MS Access VBA解决了这个错误

发生的情况是:

  • 一个用于连接到SFTP服务器并上传文件的函数
    UploadSomething
  • 在函数
    UploadSomething
    中,使用以下代码更改了“恢复支持”选项:
    myTransferOptions.ResumeSupport.State=TransferResumeSupportState.TransferResumeSupportState\u Off
  • 更改后,代码按预期工作。但是,在调用
    UploadSomething
    的代码中,在函数完成后抛出了错误49

    该错误发生在使用调试器单步执行代码时,以及在调试器外部立即执行时。重新编译这个项目对我不起作用

    这样做的目的是:

  • 删除对COM组件的引用
  • 添加对COM组件的引用
  • 重新编译

  • 在Excel VBA中,这可能由以下几个问题中的任意一个引起:

  • 参数或返回值类型不匹配
  • 应用于错误对象的对象方法(如自动拟合) 该方法不可用的变体
  • 对外部库函数的调用
  • 损坏的库引用

  • 有关这些原因的解决方案,请参阅我的帖子:

    在尝试调用用英特尔Fortran编译的DLL时,VBA遇到了一些问题。事实证明,您需要使用编译器标志调用约定:cfv

    更多信息请访问
    关于同一问题的另一个有用的线程:

    您正在调用一个用“Declare”语句声明的本机函数,对吗?您可以与我们共享声明和调用吗?我已经修复了它…我所要做的就是使用/decompile启动访问,然后重新编译,错误就消失了。有关Excel中此错误的解决方案,请参阅我在以下位置发布的帖子:[运行时错误49,错误的DLL调用约定][1][1]:真棒的f*感谢您发布我遇到的这个问题。我只是在每个模块的顶部放了一个xxxx,然后:Debug,Compile VBAProject(它将突出显示一个xxxx)…删除-->Debug,Compile VBAProject…重复,直到不再出现编译错误。有时一个小的更改是不够的,因为VBA执行增量编译,而这些小更改可能不会触发损坏区域的重新编译。每个模块上的全选/剪切/粘贴通常会导致trickI在调用我编写的Access VBA函数(而不是外部API函数)时(以及从函数返回时)遇到此错误/反编译和重新编译成功了。我怀疑很多递归函数的调试(而不仅仅是运行)都会使访问变得混乱,而/反编译则会清除混乱。