ISO C и стандарты C++ являются чертовски дорогими. С другой стороны, INCITS переиздает их для намного меньше. http://www.techstreet.com/ , кажется, имеет PDF за 30$ (поиск INCITS/ISO/IEC 14882:2003).
версии Бумажной копии доступны, также. Ищите версии Британского института стандартов, опубликованные Wiley.
Я не верю, что это паскаль и stdcall - они очень похожи на соглашения о вызовах и не должны приводить к несоответствию стека при выходе из функции.
Это действительно было бы очень хорошо синтаксис, но это не то же самое, что выше определение массива. Массив параметры - это параметры открытого массива. Они могут выглядеть как любой массив, и они принимают любой массив, но получают дополнительный (скрытый) параметр, содержащий самый высокий индекс в массиве ( Высокое значение). Так как это только в Delphi, а не C или C ++, вы бы есть настоящая проблема. (См. Также мой статья об открытых массивах), поскольку реальное количество параметров не match.
Вы получаете дополнительный параметр «наивысший индекс массива», передаваемый функции. Это целое число, и его необходимо очистить при выходе из функции, чтобы не получить поврежденный стек и сбой. В статье показано, как передавать массивы в функции C.
Примерно так:
type
PLPXLOPER = ^LPXLOPER;
И передайте PLPXLOPER в качестве последнего параметра.
Большинство функций Windows используют __ stdcall для своих соглашений о вызовах .
Ваше соглашение о вызовах неверно, в частности "stdcall". Объявление C указано как "pascal"
. Stdcall передает параметры в порядке справа налево, ожидает, что подпрограмма очистится, и не использует регистры. Pascal, OTOH передает параметры в порядке слева направо . Следовательно, в любом случае все происходит не так, как ожидает другая половина кода.
Измените свое объявление Delphi на «pascal» вместо «stdcall».