我有一个用自由帕斯卡写的程序。它从运行时选定的DLL中导入函数。它们是用pascal;关键字导入的。我想用python代码扩展这个程序。正如我所发现的,在这种情况下,脱落皮可能会对我有所帮助。我要怎么做?实际上,我想“将python代码编译成DLL”。除了任何免费或开源工具/编译器之外,我还可以使用2012和VC++来解决我的问题。
发布于 2013-09-23 14:23:45
pascal修饰符是呼叫约定的语句。参数被推到堆栈的左向右。与cdecl调用约定(参数从右向左推送以支持C中的变体函数)相比,stdcall修饰符是另一个从右到左的调用约定。
免费Pascal支持这两种调用约定。这是cdecl,stdcall和帕斯卡的免费Pascal。调用约定绝对不兼容。如果您调用一个函数,期望它以一定的顺序设置参数,堆栈按另一个顺序排列--坏的事情就会发生。
您可能需要使用cdecl来用Python扩展Free,后者已经编译成带有shedskin的C++代码。我认为所有的 Windows都使用pascal转换,而不管DLL是用什么语言编写的。
因此,确保您使用正确的调用约定--取决于您使用代码的位置。
发布于 2013-09-23 12:58:44
假设Pascal可以使用c外部函数,那么直接使用python是可能的。不过,我认为您的第一步是理解将cpython嵌入到其他应用程序中的api python公开。
http://docs.python.org/2/extending/
https://stackoverflow.com/questions/18959705
复制相似问题