2011-01-28 62 views
1

我有一個ActiveState PerlCtrl項目。我想知道是否有可能在COM DLL中有散列,將它作爲字符串傳遞給調用進程(例如「HASH(0x2345)」),然後將該字符串傳遞迴COM DLL,並以某種方式祝福它回到指向相關的散列。可以在進程之間傳遞Perl哈希引用嗎?

獲得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") 

回答

0

不,你不能可靠地傳遞進程之間的散列引用。

4

如果這些是不同的進程,則需要序列化散列的內容或將其永久存儲在磁盤文件中。要做前者,請參閱Storable或Data :: Dumper;對於後者,它取決於它是簡單標量的哈希還是更復雜的東西。

如果它在同一個進程中是相同的perl解釋器,你可以保留一些全局變量,如%main :: hashes; 設置$main::hashes{\%Graph} = \%Graph在將字符串化引用傳遞迴調用進程之前,然後用它來查找實際的散列引用。

不要這樣做,但:http://perlmonks.org/?node_id=379395

+0

它本質上是相同的過程。 – bugmagnet 2011-01-28 05:46:21