我想創建C代碼,創建一個Python xmlrpc客戶端,並調用xmlrpc服務器上的方法(我正在考慮使用這個IPC作爲鉤DLL)。C代碼崩潰試圖通過xmlrpc Python遠程過程調用
下面是代碼...我不打算在引用計數層中,直到它工作。
#include <Python.h>
#define WIN32_LEAN_AND_MEAN
#include <Windows.h>
static PyObject *xmlrpc_server_proxy = NULL;
static PyObject *set_server_proxy(void);
static void say_hi(void);
int main()
{
xmlrpc_server_proxy = set_server_proxy();
say_hi();
return 0;
}
static PyObject *
set_server_proxy()
{
PyObject *xmlrpc_client_mod, *xmlrpc_server_proxy_class, *location, *args;
PyObject *result;
Py_Initialize();
xmlrpc_client_mod = PyImport_ImportModule("xmlrpc.client");
xmlrpc_server_proxy_class = PyObject_GetAttrString(xmlrpc_client_mod, "ServerProxy");
location = PyUnicode_FromString("http://127.0.0.1:8000/");
args = Py_BuildValue("(O)", location);
result = PyObject_CallObject(xmlrpc_server_proxy_class, args);
Py_Finalize();
return result;
}
static void say_hi()
{
PyObject_CallMethod(xmlrpc_server_proxy, "say_hi", "()");
}
我已經證實我的Python xmlrpc服務器在從另一個Python服務器代理調用時工作正常。當我嘗試運行上述可執行文件時,它在PyObject_CallMethod()
上崩潰。爲什麼?
我最初的本能是PyObject_CallObject()或set_server_proxy()中的一個Py *函數正在調用返回NULL。您應該檢查每個Py *函數的返回值,以查看返回NULL的內容,因爲它可能會提供有關錯誤地調用函數的信息。 – Suroot 2011-03-30 22:57:26