【问题标题】:Error Bad Calling Convention when debugging vb6 program调试 vb6 程序时出现错误的错误调用约定
【发布时间】:2014-02-07 07:58:11
【问题描述】:

我有一个标准的 VB 6 exe (mailviewer)。
这个程序有一个到 cobol DLL 的“链接”:

Declare Sub InkMvwMail Lib "inkvwm" Alias "INKMVWMAIL" ...

从windows启动普通exe时,

一切正常,

但是当我想在 Visual Studio 6.0 (SP6)(在 windows xp 上)中调试对 cobol DLL 入口点的调用时,我得到了

"Error 49, Bad Calling Convention"

提前感谢您的帮助

沃尔夫冈

【问题讨论】:

    标签: visual-studio dll vb6


    【解决方案1】:

    一切正常,

    不,它只是看起来那样。一切都很好,Cobol 函数被设计为从 C 程序调用。它有错误的调用约定,cdecl 而不是 stdcall。由此引起的堆栈不平衡可能导致极难诊断运行时故障,例如局部变量神秘地具有错误的值,并且包括该站点所命名的硬崩溃。

    当您从 IDE 运行时,调试器会执行额外检查,以验证堆栈指针是否在函数调用中正确恢复。不是,因此会生成错误 49 诊断。

    您需要遵循this KB article 中的指导。它无法在 VB6 中解决,这需要用另一种可以进行 cdecl 调用的语言编写一个小辅助函数,例如 C 或 C++。知识库文章展示了这样一个函数的外观,尽管他们故意给它错误的约定来演示这个问题。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-09
    • 1970-01-01
    • 2019-08-25
    • 2018-05-24
    • 2021-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多