Free Pascalで書かれたプログラムがあります。実行時に選択された DLL から関数をインポートします。それらはpascal;
キーワードでインポートされます。Python コードを使用してこのプログラムを拡張したいと考えています。私が知ったように、シェドスキンはこの状況で私にとって役立つ可能性があります. どのように進める必要がありますか? 実際、「PythonコードをDLLにコンパイル」したいのです。無料またはオープンソースのツール/コンパイラに加えて、Microsoft Visual Studio 2012 と VC++ を使用して問題を解決できます。
2 に答える
Pascal が c 外部関数を使用できると仮定すると、python c-api を直接使用することが可能です。ただし、最初のステップは、他のアプリケーションに cpython を埋め込むために python が公開する API を理解することだと思います。
pascal
修飾子は、呼び出し規約のステートメントです。パラメータは左から右にスタックにプッシュされます。C で可変個引数cdecl
関数をサポートするためにパラメーターが右から左にプッシュされる呼び出し規則と比較してください。修飾子は別の右から左への呼び出し規則です。stdcall
Free Pascal は両方の呼び出し規約をサポートしています。Free Pascal のcdecl、stdcall、およびpascalは次のとおりです。呼び出し規約は完全に互換性がありません。スタックが別の順序で配置されている特定の順序で引数をとることを期待されている関数を呼び出すと、悪いことが起こります。
shedskin で C++ コードにコンパイルされた Python で Free Pascal を拡張するには、おそらく cdecl を使用する必要があります。ただし、DLLが記述された言語に関係なく、すべてのWindows DLLがパスカル変換を使用すると思います。
そのため、コードを使用している場所に応じて、正しい呼び出し規則を使用していることを確認してください。