[リストへもどる]   [VBレスキュー(花ちゃん)]
一括表示

投稿時間:2006/08/15(Tue) 17:44
投稿者名:ピグミン
Eメール:
URL :
タイトル:
プロセス間通信について
OS:Win2000,XP 開発言語:VB6
皆様、こんにちは。いつもお世話になっています。
VBでDLLを作成し開発中はデバッグライトを表示したいため、開発環境のようなイミディエイトウ
インドウもどきのフォームを作成し、Show したら「モードレス画面は使用出来ません」のエラー
が帰ってきました。
そこで、プロセス間通信でDLL側からデバッグ用の文字列を別プロセスに送り、常駐している別プ
ロセスはメッセージを受け取ったらテキストボックスに表示。
。。。のような構想です。
まず、
・VBで実現できるのでしょうか?
・出来るとするとどのような方法で実現できるのでしょうか

キーワード、サンプル、もしくはそれについて説明しているURL等があればご教示ください。
よろしくお願いします。

投稿時間:2006/08/15(Tue) 18:33
投稿者名:K.J.K.
Eメール:
URL :
タイトル:
Re: プロセス間通信について
できますが、その仕掛けを組み込むだけ面倒な気が。
既存のDebugger + API関数のOutputDebugStringでは駄目なのでしょうか?

投稿時間:2006/08/16(Wed) 09:58
投稿者名:魔界の仮面弁士
Eメール:
URL :
タイトル:
Re: プロセス間通信について
> VBでDLLを作成し開発中はデバッグライトを表示したいため、

デバッグライトというのが Debug.Print の事なのだとしたら、その DLL プロジェクトの
vbp を起動状態にしておけば済むかと思います。


たとえば、
 Option Explicit
 Private Sub Class_Initialize()
  Debug.Print "☆生成☆"; TypeName(Me); "ID="; ObjPtr(Me);
 Debug.Print Format(Now(), " at hh\:nn\:ss yyyy\/mm\/dd")
 End Sub
 Private Sub Class_Terminate()
  Debug.Print "★破棄★"; TypeName(Me); "ID="; ObjPtr(Me);
  Debug.Print Format(Now(), " at hh\:nn\:ss yyyy\/mm\/dd")
 End Sub

というだけの Project1.DLL のプロジェクトを作成しておき、それを
VB開発環境で実行状態にしておきます。


この状態で、他の開発環境…たとえば、VBScriptとか、別に起動したVB6開発環境とかから
  Set X = CreateObject("Project1.Class1")
などとして起動した場合、上記のデバッグコードが DLL 側の開発環境に表示されます。

投稿時間:2006/08/16(Wed) 10:27
投稿者名:ピグミン
Eメール:
URL :
タイトル:
Re^2: プロセス間通信について
魔界の仮面弁士さま、ありがとうございます。
デバッグライトというは Debug.Print の事です。
通常作成したDLLは WINNT\SYSTEM32 のフォルダに置いて使用しています。
作成したDLLを使用しているプログラムはEXEの形式で提供されています
その実行形式のプログラムを実行時にDLL作成用開発環境との関係はどうなるのでしょうか?
普通はSYSTEM32フォルダのDLLが使用されます、VBPを起動状態にしても、試しにそのDLLを削除する

「ファイルが見つかりません」と怒られてしまいます。
トンチンカンナ質問になっているようならご了承ください。

投稿時間:2006/08/16(Wed) 11:23
投稿者名:魔界の仮面弁士
Eメール:
URL :
タイトル:
Re^3: プロセス間通信について
> その実行形式のプログラムを実行時にDLL作成用開発環境との関係はどうなるのでしょうか?

配置済みの DLL と、起動している DLL プロジェクトが一致するものであれば、
プロジェクト側が起動されると思います。(side-by-side モードで実行されない限りは)

たとえば、利用側が参照設定せずに利用している場合、ProgId すなわちプロジェクト名と
クラス名が完全に一致していれば、DLL開発環境側が実行されることになります。

あるいは利用側が参照設定しており、アーリーバインドで処理しようとしている場合には、
guid で判断されるため、バージョン間の互換性が重要になってくるかと思います。これは、
DLLプロジェクトのプロパティで、[コンポーネント]タブで設定される物の事です。


配置済みの DLL があるならば、それを OLEVIEW.EXE 等でチェックして、
そのクラスのCLSID を確認してみてください。
その上で、DLL プロジェクト起動時に作成されるレジストリのキーの、
  HKEY_CLASSES_ROOT\Project1.Class1\CLSID キーの値
が一致しているかどうか、および、
  HKEY_CLASSES_ROOT\CLSID\{……CLSID値……}\ キーの内容
が適切に書き換わっているかどうかを確認してみてください。


> 「ファイルが見つかりません」と怒られてしまいます。
ん…? それも奇妙ですね。
もしもDLL が見つからないなら、「ファイルが見つかりません」ではなく、

------------------------------------------------------
  実行時エラー '-2147024770 (8007007e)':
  オートメーション エラーです。
  指定されたモジュールが見つかりません。
------------------------------------------------------

というエラーが、オブジェクト生成時に表示されると思っていたのですが…。