7

Cコードからpython関数を呼び出そうとしていますが、ここからサンプルをたどりました

また、正しいインクルード ファイル ディレクトリ、ライブラリ ディレクトリ、および python32.lib のリンク (python 32 を使用) がありますが、エラーは、PyString_FromString、PyInt_FromLong、PyInt_AsLong などの python/C API が定義されていないことでした (デバッガーのエラー)。

私は他のAPIも使用しているので、これは奇妙ですが、それらはすべて問題ありません...

ここで問題は何ですか??

int
main(int argc, char *argv[])
{
    PyObject *pName, *pModule, *pDict, *pFunc;
    PyObject *pArgs, *pValue;
    int i;

    if (argc < 3) {
        fprintf(stderr,"Usage: call pythonfile funcname [args]\n");
        return 1;
    }

    Py_Initialize();
    pName = PyString_FromString(argv[1]);
    /* Error checking of pName left out */

    pModule = PyImport_Import(pName);
    Py_DECREF(pName);

    if (pModule != NULL) {
        pDict = PyModule_GetDict(pModule);
        /* pDict is a borrowed reference */

Py_Initialize()、PyImport_Import()、PyModule_GetDict() はすべて正常に動作しますが、PyString_FromString では動作しません...

4

1 に答える 1

18

使用したサンプルコードは、古いPythonバージョン2.3.2用です。Python 3.x行では、言語だけでなくCAPIにも多くの非互換性が導入されました。

あなたが言及した関数は、Python3.2には存在しなくなりました。

PyString_関数の名前がに変更されましたPyBytes_

PyInt_関数がなくなったので、PyLong_代わりに使用する必要があります。

これは、Python 3で使用したのと同じ例ですが、

5.3。純粋な埋め込み

PyUnicode_の代わりにを使用していることに注意してくださいPyString_/PyBytes_。Python 2.xがバイト文字列を使用していた多くの場所で、Python3.xはUnicode文字列を使用しています。

ちなみに、私は通常、このページを使用して、考えられるすべての呼び出しを検索します。

インデックス– P

于 2011-11-22T16:01:57.123 に答える