将Python代码编译为Pascal DLL

时间:2013-09-23 12:50:10

标签: c++ python dll freepascal shedskin

我有一个用Free Pascal编写的程序。它从运行时选择的DLL导入函数。它们是使用pascal;关键字导入的。我想使用python代码扩展这个程序。正如我发现shedskin在这种情况下对我有帮助。我该如何进行?实际上我想“将python代码编译为DLL”。除了任何免费或开源工具/编译器之外,我还可以使用Microsoft Visual Studio 2012和VC ++来解决我的问题。

2 个答案:

答案 0 :(得分:3)

假设Pascal可以使用c外部函数,可以直接使用python c-api。我认为你的第一步是理解api python暴露在其他应用程序中嵌入cpython。

http://docs.python.org/2/extending/

答案 1 :(得分:2)

pascal修饰符是calling convention的语句。参数从左向右推入堆栈。与cdecl调用约定相比较,其中参数从右向左推动以支持C中的variadic函数。stdcall修饰符是另一个左调用约定的权限。

Free Pascal支持两种调用约定。 Free Pascal的cdeclstdcallpascal。调用约定绝对不兼容。如果你调用一个函数,那么它会按照一定顺序进行参数,并且堆栈按其他顺序排列 - 会发生不好的事情。

您可能需要使用cdecl来扩展Free Pascal,并使用已编译为带有shedskin的C ++代码的Python。我认为所有 Windows DLL都使用pascal转换,而不管DLL编写的语言如何。

因此请确保使用正确的调用约定 - 具体取决于您使用代码的位置。