1

我有一个适用于 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?这会产生不利影响吗?

实际上,为什么要指定调用约定呢?

谢谢

4

1 回答 1

2

在 Windows CE 中,__stdcall是一个解析为__cdecl. 也就是说,它们指定了相同的调用约定。你的问题在别处。使用调试器进行调查。

可能会指定调用约定,因为它需要为 DLL 的桌面版本指定,并且为两个目标保持相同的源代码比使用没有实际效果的条件编译来混乱它更容易。

于 2012-09-07T15:04:52.077 回答