タイトルの通りです。これができたらプログラムは大幅に改善できるのですが・・、今はわざわざDDEを使ったり、ファイルを介したりと大変です。もしできるの
であればどなたか教えて下さい.
どのような動作を期待しているのかが見えないのですが、
データの受け渡しなら、プロパティなり、イベントなりを公開して、
そこでやりとりすれば良いのでは無いでしょうか。
イベントを公開してというのはWith eventを使ってやろうとしたのです
が、たくさんアウトプロセスを呼ぶので、うまく宣言できず断念しました。
プロパティを公開するというのはそれとは違う方法なのでしょうか?よろしければ
もう少し詳しく教えていただけるとうれしいです。
(やりたい事は、Javaみたいにマルチスレッドでも、メインのプロセスの変数
を扱えるようにしたいのです)
…ActiveX側のプロシージャの引数をByRefにするとか?
参照渡しでするとこんがらかるけれど相手を参照できるはずです。
変数が多い場合は、クラスや定義型にまとめるとかする方法がありますが、
定義型は外部に渡せない気がしますので、オブジェクトを渡すのがいいとおもいます。
ファイト。
イトウさん。ありがとうございます。
イトウさんのおっしゃる方法でやると、Activex側の関数呼び出しでオブ
ジェクトを渡して、関数が呼び出し終わっても、参照は続くのでしょうか?
(C言語のポインタみたいに)、質問ばかりですいませんがお願いします。
返信送れてすいません。
参照は続くはずです。
もし、参照先が気になるのであれば、次のコードを試してください。
'for VB6(or VB5?)
Private Declare Sub MoveMemory Lib "KERNEL32" Alias "RtlMoveMemory" (Dest As Any, Source As Any, ByVal length As Long)
Sub a()
Dim i As Long
Dim u As New StdFont
Dim p As Object
Set p = u
MoveMemory i, p, 4
Debug.Print VarPtr(i), VarPtr(u), VarPtr(p)
Debug.Print i, ObjPtr(u), ObjPtr(p)
End Sub
参照が続いているかどうかを判別するために、
気になるところで目的のオブジェクト型の「参照値」をObjPtrやCopyMemoryで
実験してみてください。
それでは。
本当に申し訳ないのですが、具体的にどんなオブジェクトを渡せばいいのでしょうか?、ただ変数を共有したいだけなのですが、あと、上のコードは何をする物
でしょうか?すいません、あまりAPIとか詳しくなくて。
できました。マジで感動です。ByRefで渡せば参照が続くものなのですね。
せっかくなので、手順を残しておこうと思います。(ネットでこの情報がぜんぜん
なかったし)
1、必要な変数を書いたclsをDLLにする。
2、共有したいプロジェクトでそれぞれ、それを参照設定する。
3、共有したい相手にpublicな関数を書き、クラスを渡して、それを参照できる
ようにする。
public function func(ByRef cls as class1) ←class1はDLLのクラス名
set tcls=cls
のような感じで、
4、最初にオブジェクトを作った側から、オブジェクトを渡してあげる。
set a = new class1
call outexe.func(a)
(outexe)はActivex.exeの中のクラス名
5、あとは、それぞれ好き勝手に、クラスの中の変数を変えれば、参照した他の
プログラムから変数の値を使っても一緒になる。共有できる!!
以上。おこじょ番町奮闘記でした。
ツイート | ![]() |