Вызов Определенного Win32 API от Delphi - Почему Исключения Летят Без “asm, выталкивает …”?

ISO C и стандарты C++ являются чертовски дорогими. С другой стороны, INCITS переиздает их для намного меньше. http://www.techstreet.com/ , кажется, имеет PDF за 30$ (поиск INCITS/ISO/IEC 14882:2003).

версии Бумажной копии доступны, также. Ищите версии Британского института стандартов, опубликованные Wiley.

6
задан MB. 7 July 2009 в 15:57
поделиться

3 ответа

Я не верю, что это паскаль и stdcall - они очень похожи на соглашения о вызовах и не должны приводить к несоответствию стека при выходе из функции.

Из упомянутой статьи ],

Это действительно было бы очень хорошо синтаксис, но это не то же самое, что выше определение массива. Массив параметры - это параметры открытого массива. Они могут выглядеть как любой массив, и они принимают любой массив, но получают дополнительный (скрытый) параметр, содержащий самый высокий индекс в массиве ( Высокое значение). Так как это только в Delphi, а не C или C ++, вы бы есть настоящая проблема. (См. Также мой статья об открытых массивах), поскольку реальное количество параметров не match.

Вы получаете дополнительный параметр «наивысший индекс массива», передаваемый функции. Это целое число, и его необходимо очистить при выходе из функции, чтобы не получить поврежденный стек и сбой. В статье показано, как передавать массивы в функции C.

Примерно так:

type
 PLPXLOPER  = ^LPXLOPER;

И передайте PLPXLOPER в качестве последнего параметра.

8
ответ дан 16 December 2019 в 21:44
поделиться

Большинство функций Windows используют __ stdcall для своих соглашений о вызовах .

0
ответ дан 16 December 2019 в 21:44
поделиться

Ваше соглашение о вызовах неверно, в частности "stdcall". Объявление C указано как "pascal"

. Stdcall передает параметры в порядке справа налево, ожидает, что подпрограмма очистится, и не использует регистры. Pascal, OTOH передает параметры в порядке слева направо . Следовательно, в любом случае все происходит не так, как ожидает другая половина кода.

Измените свое объявление Delphi на «pascal» вместо «stdcall».

0
ответ дан 16 December 2019 в 21:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: