Python xmlrpc 클라이언트를 만들고 xmlrpc 서버에서 메서드를 호출하는 C 코드를 만들려고합니다 (이 코드를 후크 DLL에 대해 IPC로 사용하려고합니다).xmlrpc를 통해 파이썬 원격 프로 시저 호출을 시도하는 C 코드가 충돌합니다.
코드는 다음과 같습니다. 작동 될 때까지 참조 계산에 레이어하지 않을 것입니다.
#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 서버 프록시에서 호출 할 때 내 Python xmlrpc 서버가 제대로 작동하는지 확인했습니다. 위의 실행 파일을 실행하려고하면 PyObject_CallMethod()
에서 충돌합니다. 왜?
내 초기 본능 : 파이썬의 당신이 당신의 수입을 변경해야 할 수도 있습니다
xmlrpclib.ServerProxy
표준을 사용하려는 경우,둘째로 :
는main()
기능을 내부에 통역 초기화 호출을 이동PyObject_CallObject()이거나 set_server_proxy()의 Py * 함수 중 하나가 호출이 NULL을 반환하고 있다는 것입니다. 각 Py * 함수의 반환을 확인하여 함수를 잘못 호출하는 것에 대한 통찰력을 줄 수 있으므로 NULL을 반환하는 것이 무엇인지 확인해야합니다. – Suroot