草庐IT

nable-stdcall-fixup

全部标签

c++ - 如何声明 __stdcall 函数指针

我试过了typedefvoid(*__stdcallMessageHandler)(constTask*);这编译但给了我这个警告(VS2003):warningC4229:anachronismused:modifiersondataareignored我想用stdcall调用约定声明一个指向函数的指针?我做错了什么? 最佳答案 作为MSDNsays,正确的写法是typedefvoid(__stdcall*MessageHandler)(constTask*); 关于c++-如何声明_

c++ - __stdcall 的含义和用法是什么?

我遇到过__stdcall这些天很多。MSDN并没有很清楚地解释它的真正含义,何时以及为什么应该使用它,如果有的话。如果有人能提供解释,最好是一两个例子,我将不胜感激。 最佳答案 C/C++中的所有函数都有特定的调用约定。调用约定的重​​点是确定如何在调用者和被调用者之间传递数据,以及谁负责清除调用堆栈等操作。Windows上最流行的调用约定是__stdcall,以相反的顺序(从右到左)将参数压入堆栈__cdecl,以相反的顺序(从右到左)将参数压入堆栈__clrcall,按顺序(从左到右)将参数加载到CLR表达式堆栈中。__fas

c++ - __cdecl 或 __stdcall 在 Windows 上?

我目前正在为Windows开发一个C++库,它将作为DLL分发。我的目标是最大化二进制互操作性;更准确地说,我的DLL中的函数必须可以从使用多个版本的MSVC++和MinGW编译的代码中使用,而无需重新编译DLL。但是,我对哪种调用约定最好感到困惑,cdecl或stdcall.有时我会听到诸如“C调用约定是唯一保证跨编译器相同的”之类的声明,这与“Therearesomevariationsintheinterpretationofcdecl,particularlyinhowtoreturnvalues”之类的声明形成鲜明对比。这似乎并没有阻止某些库开发人员(如libsndfile)