2011-01-28 1 views
1

J'ai un projet ActiveState PerlCtrl. Je voudrais savoir si il est possible d'avoir un hachage dans la DLL COM, passer son ref au processus appelant sous la forme d'une chaîne (par exemple "HASH (0x2345)") et ensuite transmettre cette chaîne dans la DLL COM et en quelque sorte bénis en retour en pointant vers le hachage pertinent. Obtenir le hashref semble assez facile, en utilisant return "" . \%Graph; et j'ai essayé des choses comme $Graph = shift; $Graph = bless {%$Graph}; mais ils ne semblent pas réaliser ce que je suis après. Le hachage% Graph est au moins global pour le module.Peut-on passer des références de hachage Perl entre les processus?

Le code de test (VBScript):

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

Répondre

0

Non, vous ne pouvez pas passer de manière fiable les références de hachage entre les processus.

4

Si ces processus sont différents, vous devrez sérialiser le contenu du hachage ou le stocker de manière persistante dans un fichier disque. Pour faire le premier, voir Storable ou Data :: Dumper; pour ce dernier, cela dépend si c'est un hachage de scalaires simples ou quelque chose de plus complexe.

Si c'est le même interpréteur perl dans le même processus, vous pouvez conserver une variable globale comme% main :: hashes; définissez $main::hashes{\%Graph} = \%Graph avant de renvoyer la référence stringifiée au processus appelant, puis de l'utiliser ultérieurement pour rechercher la référence de hachage réelle.

Ne pas le faire, cependant: http://perlmonks.org/?node_id=379395.

+0

C'est essentiellement le même processus. – bugmagnet

Questions connexes