我正在尝试使用 C++ 编写 motorbee
当我运行代码时出现以下错误:
Run-Time Check Failure #0 - The value of ESP was not properly saved across a function call. This is usually a result of calling a function declared with one calling convention with a function pointer declared with a different calling convention.
这是我的代码。
#include "stdafx.h"
#include <iostream>
#include "windows.h"
#include "mt.h"
using namespace std;
HINSTANCE BeeHandle= LoadLibrary("mtb.dll");
Type_InitMotoBee InitMotoBee;
Type_SetMotors SetMotors;
Type_Digital_IO Digital_IO;
void main ()
{
InitMotoBee = (Type_InitMotoBee)GetProcAddress( BeeHandle,"InitMotoBee");
SetMotors =(Type_SetMotors)GetProcAddress(BeeHandle,"SetMotors");
Digital_IO =(Type_Digital_IO)GetProcAddress(BeeHandle,"Digital_IO ");
InitMotoBee();
SetMotors(0, 50, 0, 0, 0, 0, 0, 0, 0);
}
最佳答案
您的 typedef
函数指针需要匹配 calling convention您正在使用的图书馆。例如,如果 InitMotoBee
使用 cdecl
你的 typedef
看起来像:
typedef bool (__cdecl *Type_InitMotoBee)(void)
SetMotors
函数采用参数,因此也需要为此正确设置调用约定(这很可能是应用程序失败的地方)。
关于C++ 运行时检查失败 #0 - ESP 的值未在函数调用中正确保存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10079625/