我正在尝试用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); }
解决方法
您的typedef函数指针需要匹配您正在使用的库的
calling convention.例如,如果InitMotoBee使用
cdecl
,则typedef将如下所示:
typedef bool (__cdecl *Type_InitMotoBee)(void)