2011-01-28 11 views
1

私はActiveState PerlCtrlプロジェクトを持っています。私はCOM DLLにハッシュを持つことが可能かどうかを知りたいと思う、それは呼び出し元のプロセスに文字列(たとえば "ハッシュ(0x2345)"として参照してください)を渡し、COM DLLに戻ってその文字列を返し、関連するハッシュを指すように戻ってください。プロセス間でPerlハッシュリファレンスを渡すことはできますか?

ハッシュリファレンスを取得することは、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

関連する問題