использование __stdcall и __cdecl в библиотеках Windows CE

У меня есть приложение Visual Studio 2008 C ++ 03 для Windows CE 6.0 x86. У меня проблема, когда вызов функции из 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? Может ли это иметь отрицательный эффект?

На самом деле, зачем вообще указывать соглашение о вызовах?

Спасибо

1

Решение

В Windows CE __stdcall это макрос, который разрешает в __cdecl, То есть они обозначают одни и те же соглашения о вызовах. Ваша проблема лежит в другом месте. Используйте отладчик для расследования.

Соглашение о вызовах может быть указано, потому что оно должно быть указано для настольной версии DLL, и легче сохранить исходный код одинаковым для обеих целей, чем загромождать его условной компиляцией, которая не имеет реального эффекта.

2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector