C++ 将Python代码编译为Pascal DLL

C++ 将Python代码编译为Pascal DLL,c++,python,dll,freepascal,shedskin,C++,Python,Dll,Freepascal,Shedskin,我有一个用英语写的程序。它从运行时选择的DLL导入函数。它们是用pascal导入的关键字。我想用python代码扩展这个程序。我发现在这种情况下可能会对我有所帮助。我需要如何继续?事实上,我想“将python代码编译成DLL”。除了任何免费或开源的工具/编译器之外,我还可以使用Microsoft Visual Studio 2012和VC++来解决我的问题。假设Pascal可以使用c外部函数,直接使用python c-api是可能的。不过,我认为您的第一步是理解python为在其他应用程序中嵌入

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

假设Pascal可以使用c外部函数,直接使用python c-api是可能的。不过,我认为您的第一步是理解python为在其他应用程序中嵌入cpython而公开的api


假设Pascal可以使用c外部函数,那么直接使用python c-api是可能的。不过,我认为您的第一步是理解python为在其他应用程序中嵌入cpython而公开的api


pascal
修饰符是一个。参数从左到右推送到堆栈上。与
cdecl
调用约定相比,
stdcall
修饰符是另一种从右到左的调用约定

免费Pascal支持两种调用约定。这是免费的帕斯卡。调用约定肯定不兼容。如果你调用一个函数,它的参数按一定的顺序排列,堆栈按另一个顺序排列,那么糟糕的事情就会发生

您可能需要使用CDEL来扩展Free Pascal,而Python已经被编译成带有SeeScess的C++代码。我认为无论DLL是用什么语言编写的,所有Windows DLL都使用pascal转换


因此,请确保您使用了正确的调用约定——这取决于您使用代码的位置

pascal修饰符是一个。参数从左到右推送到堆栈上。与
cdecl
调用约定相比,
stdcall
修饰符是另一种从右到左的调用约定

免费Pascal支持两种调用约定。这是免费的帕斯卡。调用约定肯定不兼容。如果你调用一个函数,它的参数按一定的顺序排列,堆栈按另一个顺序排列,那么糟糕的事情就会发生

您可能需要使用CDEL来扩展Free Pascal,而Python已经被编译成带有SeeScess的C++代码。我认为无论DLL是用什么语言编写的,所有Windows DLL都使用pascal转换


因此,请确保您使用了正确的调用约定——这取决于您使用代码的位置

免费Pascal上的Afaik Pascalstdcall。对于windows DLL,您需要stdcall。免费Pascal上的Afaik Pascalstdcall。对于windows DLL,您需要stdcall。免费Pascal还支持ActiveX IDispatch接口,如Delphi。与脚本语言的接口有时更方便。也许更明智的做法是看看各种DelphiPython桥。免费的Pascal还支持ActiveX IDispatch接口,比如Delphi。与脚本语言的接口有时更方便。也许更明智的做法是看看各种各样的桥梁。