У меня есть программа, написанная на Свободный Паскаль. Он импортирует функции из библиотеки DLL, выбранной во время выполнения. Они импортируются с pascal;
ключевое слово. Я хочу расширить эту программу, используя код Python. Как я узнал shedskin может быть полезным для меня в этой ситуации. Как мне нужно продолжить? На самом деле я хочу «скомпилировать код Python в DLL». В дополнение к любому бесплатному или общедоступному инструменту / компилятору я могу использовать Microsoft Visual Studio 2012 и VC ++ для решения моей проблемы.
pascal
Модификатор является заявлением соглашение о вызовах. Параметры помещаются в стек слева направо. Сравните с cdecl
соглашение о вызовах, когда параметры помещаются справа налево для поддержки VARIADIC функции в C. stdcall
Модификатор — это другое соглашение о вызовах справа налево.
Free Pascal поддерживает оба соглашения о вызовах. Вот Cdecl, STDCALL а также паскаль для свободного паскаля. Соглашения о вызовах определенно НЕ совместимы. Если вы вызываете функцию, ожидающую, что она рассылает аргументы в определенном порядке, а стек — в другом порядке, то произойдут плохие вещи.
Вам, вероятно, понадобится использовать cdecl для расширения Free Pascal с помощью Python, который был скомпилирован в код C ++ с помощью shedskin. Я думаю все Windows DLL используют преобразование паскаля независимо от языка, на котором была написана DLL.
Поэтому убедитесь, что вы используете правильное соглашение о вызовах — в зависимости от того, где вы используете код.
Предполагая, что Паскаль может использовать c сторонние функции, возможно использование Python c-api напрямую. Тем не менее, я думаю, что ваш первый шаг — это понимание возможностей API Python для встраивания cpython в другие приложения.