调试vb6程序时出现错误调用约定

时间:2014-02-07 07:58:12

标签: visual-studio dll vb6

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

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

从Windows启动普通exe时,

一切正常,

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

"Error 49, Bad Calling Convention"

感谢您提前提供任何帮助

沃尔夫冈

1 个答案:

答案 0 :(得分:4)

  

一切正常,

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

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

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