我有一个适用于 Windows CE 6.0 x86 的 Visual Studio 2008 C++03 应用程序。我遇到了一个问题,即从 DLL 调用函数会导致访问冲突异常,但仅限于调试模式。
// DLL header
extern "C" BOOL __stdcall Foo( const wchar_t*, const wchar_t*, wchar_t*, unsigned long );
// program
#include "foo.h"
#pragma comment( lib, "foo.lib" )
int main()
{
wchar_t f[ 100 ];
Foo( L"something", L"nothing", f, countof( f ) ); // access violation
return 0;
}
我意识到这可能是由许多不同的事情引起的,但我很好奇__stdcall
在 DLL 标头中的使用。在 Windows CE 中,默认(对于 Windows API)是__cdecl
. 为什么要使用这个库__stdcall
?这会产生不利影响吗?
实际上,为什么要指定调用约定呢?
谢谢