gpt4 book ai didi

c++ - Python 3.2 PyRun_SimpleString - 它在哪里?

转载 作者:太空狗 更新时间:2023-10-29 21:04:15 24 4
gpt4 key购买 nike

我正在尝试将应用程序与自定义的 Python 发行版一起发布(添加了模块和我自己的扩展)。

为了保持简单并且不冒与潜在现有安装发生冲突的风险,我认为最好的方法是将 .\DLLS*.* 和 .\Lib*.* 树从\Python32\与我的应用程序放在一个子目录下.\MyApp\Python\

我只直接调用了 3 个 Py* 函数:(代码是 C++ Builder...)

typedef void (__stdcall *PY_SETPYTHONHOME) (wchar_t *);
PY_SETPYTHONHOME Py_SetPythonHome;

typedef void (__stdcall *PY_INITIALIZE) ();
PY_INITIALIZE Py_Initialize;

typedef int (__stdcall *PYRUN_SIMPLESTRING) (const char *);
PYRUN_SIMPLESTRING PyRun_SimpleString;




HMODULE py_dll_hndle;
py_dll_hndle = ::LoadLibrary((ExtractFilePath(Application->ExeName) + "Python\\DLLS\\python3.dll").c_str());
ShowMessage(py_dll_hndle == NULL ? L"Bah" : L"Yay"); // Result: "Yay"


Py_SetPythonHome = (PY_SETPYTHONHOME) ::GetProcAddress(py_dll_hndle, "Py_SetPythonHome");
ShowMessage(Py_SetPythonHome == NULL ? L"Bah" : L"Yay"); // Result: "Yay"


Py_Initialize = (PY_INITIALIZE) ::GetProcAddress(py_dll_hndle, "Py_Initialize");
ShowMessage(Py_Initialize == NULL ? L"Bah" : L"Yay"); // Result: "Yay"


PyRun_SimpleString = (PYRUN_SIMPLESTRING) ::GetProcAddress(py_dll_hndle, "PyRun_SimpleString");
ShowMessage(GetLastError()); // Result: "127" (ERROR_PROC_NOT_FOUND)
ShowMessage(PyRun_SimpleString == NULL ? L"Bah" : L"Yay"); // Result: "Bah"

PyRun_SimpleString 不存在?我一直在寻找使用 http://www.nirsoft.net/ DLL 导出查看器...它不存在。我很困惑……它到底在哪里?

最佳答案

有两个DLL的python3.dll和python32.dll。第一个是第二个的子集。只有一个 python32.dll 拷贝 - 隐藏在我的\Windows\SysWOW64\目录中,而 python3.dll 也在 c:\Python32\DLLs 目录中。

使用 python32.dll 而不是 python3.dll 解决了这个问题。

为什么会出现部分重复仍然是个谜...

关于c++ - Python 3.2 PyRun_SimpleString - 它在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11621657/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com