1

我有一个 ActiveState PerlCtrl 项目。我想知道是否有可能在 COM DLL 中有一个哈希,将它作为字符串传递给调用进程(例如“HASH(0x2345)”),然后将该字符串传递回 COM DLL 并以某种方式祝福它重新指向相关的哈希。

获取 hashref 似乎很容易,使用return "" . \%Graph;并且我已经尝试过类似的东西,$Graph = shift; $Graph = bless {%$Graph};但它们似乎并没有达到我所追求的目标。%Graph 散列至少对模块是全局的。

测试代码(VBScript):

set o = CreateObject("Project.BOGLE.1")
x = o.new_graph()
wscript.echo x
x = o.add_vertex(x, "foo")
4

2 回答 2

4

如果这些是不同的进程,您将需要序列化散列的内容或将其永久存储在磁盘文件中。要执行前者,请参阅 Storable 或 Data::Dumper;对于后者,这取决于它是简单标量的散列还是更复杂的散列。

如果是同一个进程中的同一个perl解释器,可以保留一些全局变量,比如 %main::hashes; 在将字符串化引用传回调用进程之前设置$main::hashes{\%Graph} = \%Graph,然后使用它来查找实际的哈希引用。

但是不要这样做: http://perlmonks.org/?node_id= 379395

于 2011-01-28T05:41:58.357 回答
0

不,您不能可靠地在进程之间传递哈希引用。

于 2011-01-28T05:39:17.557 回答