【发布时间】:2019-11-07 08:06:19
【问题描述】:
在 C++ 中,我采用一个 int 类型变量并将其地址传递给 python。地址是十六进制的,并作为字符串传递给 python。在python中,我将其转换为int类型并使用ctypes.cast()。但它崩溃了。
在python中,
class testClass:
def testMethod(actorArg, stringArg):
a = int(stringArg,16) #stringArg is the hex address in string type
print(type(a)) #gives int type
print(ctypes.cast(a, ctypes.py_object).value) #crashes!
基本想法来自我在 python 中执行此操作的这个 ctypes,
import ctypes
s = 10
print(id(s)) #gives the address of s
print(ctypes.cast(id(s), ctypes.py_object).value) #gives the value from address
简而言之,我想通过 c++ 发送的地址在 python 中获取价值。知道我在哪里做错了吗?提前致谢。
【问题讨论】:
-
您想将内存地址从一个可执行文件(用 c++ 编写)传递给另一个(用 python 编写)?
-
实际上我正在使用虚幻游戏引擎。我想将变量的地址从 C++ 传递到蓝图到 python。我可以将地址传递给python。但是从 python 中,我无法使用地址获取值。 Unreal内置了python。此外,ctypes.cast(obj,type)有什么问题。我还是不太明白。
-
这通常是不可能的[1]。当应用程序在操作系统中运行时,操作系统会为进程分配一个“应用程序空间”。在那里你可以声明数组,或者玩弄指针。指向一个应用程序的内存位置的指针对另一个应用程序没有意义。 [1] - 你需要一个类似
shared memory或pipe的机制来进行进程间通信;查找如何为您的用例做到这一点。 -
@Roy2511 可能是,我没有正确理解 OP,但他声称:嵌入了 python 解释器。在这种情况下,Python 和 C++ 代码在同一个进程中运行。 (这是我们在应用程序中使用它的方式。)将地址作为十六进制字符串传递对我来说仍然有点令人费解,但在这种情况下它可以工作。
-
既然unreal已经嵌入了python,那么这里c++和python是使用不同的内存空间吗?如果内存相同,我需要一个变量从 c++ 函数传递给 python。但到目前为止我做不到。所以我的想法是从 C++ 传递内存地址,python 可以拥有它并使用该地址获取值。现在我可以将地址从 c++ 传递给 python(如字符串类型。出于某种原因,我必须将十六进制转换为字符串)。我想在 python 中使用它来从内存中获取值。
标签: python c++ ctypes memory-address