1

Windows CE6.0x86用のVisualStudio2008 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 に答える