2009-06-02 22 views
2

私はいくつかの考古学を作っています。COM +を取り扱っていますcom +コンポーネントを呼び出す方法は?

単純なCOM dllをCOM +コンポーネントとして登録することができました。

私はこの 'foobar' com +コンポーネントを持っています。インターフェイスとそれを呼び出す方法があります。

私の質問はラリーシンプルです:このコンポーネントを呼び出すにはどうすればいいですか?

どれ.NETまたはVB6答えが受け入れられている(私はコンポーネントをチェックする必要がOKで、クライアントを気にしないでください)

おかげ

編集(06/03/09):まあ、よくわかりません。正常に動作するように、私のCOM +コンポーネントにはDLLが登録されている必要があります。何故なの?しかし、それでは、COMの呼び出しではなく、COMの呼び出しであることを確認する方法は?

可能

答えて

1

をVB6/VB.NETで何かを構築するのではなく、素早くVBScriptを使用してコンポーネントが応答するかどうかをチェックすることが必要です。

Dim o : Set o = CreateObject("Lib.Class") 
o.YourMethod "someParam" 

コンポーネントサービスでCOM +アプリケーションを監視し、要求されたクラスがスピンアップしているかどうかを確認します。

+0

ありがとう、それは完全に機能しました – Vinzz

+0

Err ...実際には、私のバニラCOM DLLが登録され、私の呼び出しではなく、COM +コンポーネント – Vinzz

+1

COMコンポーネントが登録された後、コンポーネントサービスでCOM +アプリケーションにdllをドラッグする必要があります。 COM +はレジストリエントリを修正してCreateObject呼び出しを指示します。あなたはライブラリーアプリの権利ではないサーバーアプリを使用していますか? – AnthonyWJones

2

最も簡単なVB.NETのコードスニペット:

あなたのコンポーネントの実際のプログラムIDと「MyCom.ProgId」を交換する必要が
Dim myCom As Object 
myCom = CreateObject("MyCom.ProgId") 
myCom.Method(parms) 

- あなたがコンポーネントのプロパティの[全般]タブからこれを取得することができますコンポーネントサービス管理ツール(すでにその把握を持っているように聞こえる)

myCom.Method(PARMS)に

は、単にあなたがそのパラメータを使用して、呼び出したいどんな方法のためのプレースホルダですメソッドがかかります。ここで

はVB.NETの構文のいくつかの例へのリンクです:

http://msdn.microsoft.com/library/de...eateObject.asp

http://www.samspublishing.com/articl...le.asp?p=25857

http://msdn.microsoft.com/library/en...asp?frame=true

+0

あなたのリンクは死んでいるようですが、とにかくあなたの洞察力に感謝します。私が今欠けているのは、クライアントをコンパイルできるように、COM +コンポーネントへの参照を作成する方法です。 – Vinzz

+0

レイトバインディング時にCOMコンポーネントへの参照は必要ありません。これはコード例の構文です。ランタイムは、ProgId文字列でコンポーネントを検索し、メモリにロードし、コード内でメソッドを呼び出そうとします。 これは、存在しないメソッドを呼び出そうとした場合や、不正なパラメータを渡そうとすると、以前に見たことのない新しいランタイムエラーが発生する可能性があります。早期バインディングは、これらのタイプのエラーを防ぎます。コンパイラはそれらを捕捉します。 – Adam

1

VB6でアダムのコードは似ています。

Dim myCom As Object 
Set myCom = CreateObject("MyCom.ProgId") 
myCom.Method(parms 

このexa mpleはレイト・バインドで、パフォーマンス・ペナルティを伴います。 メソッドを早期に呼び出して、ペナルティを回避することができます。 VB6やVB.NETのいずれかで、ちょうどあなたの参照にCOM + DLLを追加し、あなたがこのようにオブジェクトを呼び出すことができます。

VB6すべての場合

dim myCom as MyCom.ProgId 
set myCom = new MyCom.ProgId 
myCom.Method 

VB.NET

dim myCom as new MyCom.ProgId 
myCom.Method(...) 
+0

ありがとうございますが、このプロジェクトをコンパイルするために何らかのリファレンスを作成する必要があります。 COM +コンポーネントへの参照を作成するにはどうすればよいですか? – Vinzz

+0

COM +コンポーネントはCOMコンポーネントと同じですが、追加のトランザクションゴーだけを使用するため、同じ方法で参照します。 VB6では、プロジェクト/参照メニューに移動します。 VB.NETでは、ソリューションエクスプローラでプロジェクトを右クリックし、参照の追加...を選択します。 – AngryHacker

1

あなたはMYSERVERは、COM +アプリケーションが作成され、あなたのDLLが登録されているマシンの名前です。この

Dim o As Object 
Set o = CreateObject("Lib.Class", "MYSERVER") 

を使用し、その後RMI用のCOM +を使用します。その後

o.YourMethod "someParam" 

がリモートで呼び出されます。オートメーション互換のインターフェイスのみを使用している場合、COM +はRMI用のプロキシを正常に作成します。それ以外の場合は、クライアントマシンにタイプライブラリを提供する必要があります。これは別のTLBまたはDLLそのものにすることができます。

+0

@Herbrich:これはVB6コードです。 'CreateObject'のユーザ/パスパラメータはありません。 – wqw

関連する問題