2016-04-14 18 views
1

JACOB(Java COM Bridge)ライブラリを使用して、Windows OSから登録済みCOMオブジェクトを呼び出しています。 JACOBの仕組みを理解し、すべてをセットアップするまでには、しばらく時間がかかりました。私が電話をかけたい場合はC#JACOBで書かれた自己生成され、登録されたCOMオブジェクトは、次のエラーを応答例えばJACOBライブラリの有効なCOM構造体とは何ですか?

ActiveXComponent comp = new ActiveXComponent("iTunes.Application"); 

の作品、私のiTunesがなど 正常に起動:

Exception in thread "main" com.jacob.com.ComFailException: Can't co-create object 
だから、私の現在の問題は、ということです私のiTunesはJACOBは、現在、私は、ビルド・レジスタにVisual Studio 2015を使用しています自分の.dll

を呼び出すことはできませんなぜ、すべてが私はわからないんだけど、右に設定されていることを私のための指標とした始めたと

pを働かせたCOM相互運用機能用私のために過去の良いretty良い。 COMオブジェクトは、次のようになります。

[Guid("EAA4976A-45C3-4BC5-BC0B-E474F4C3C83F")] 
public interface ComClass1Interface 
{ 
} 

[Guid("7BD20046-DF8C-44A6-8F6B-687FAA26FA71"), InterfaceType(ComInterfaceType.InterfaceIsIDispatch)] 
public interface ComClass1Events 
{ 
} 

[ComVisible(true)] 
[Guid("0D53A3E8-E51A-49C7-944E-E72A2064F938"), ClassInterface(ClassInterfaceType.None), ComSourceInterfaces(typeof(ComClass1Events))] 
[ProgId("test.Application")] 
public class ComClass1 : ComClass1Interface 
{ 
} 

は、私のC#のDLLに何か問題ですかJACOBは、このDLL内の構造の特定のタイプを必要としていますか?

残念ながら、JACOBのCOMの例は見つかりませんでした。

ありがとうございます。

EDIT:

私は私の最初の行を変更した場合:

ActiveXComponent comp = new ActiveXComponent("CLSID:{C9888A8E-8D23-4185-9D7D-A1E0B812803D}"); 

私は次の例外取得しています:私の.dll

Exception in thread "main" com.jacob.com.ComFailException: Can't find moniker 

はしかし登録する必要があります。

答えて

1

ヒントのおかげで、私は解決策を見つけることができました:

Visual Studioは、明らかに32ビットとして私のCOM-オブジェクトを登録しました。 これがデフォルト設定(?)であるかわかりません。

だから、問題を解決するには、2つの簡単なステップ:

  1. は、管理者としてcmdをあなたの窓を開けます。
  2. 次のコマンドを実行します。

    C:\ WINDOWS \ Microsoft.NET \ Framework64 \ v4.0.30319ます。regasm \。

コマンドが64ビットでの.dllを登録していない32 これますexeファイル/冗長/ NOLOGO /コードベース「あなたのDLLへのパスは、」私のために問題を解決して、私はJACOBを経由して、それを使用することができます。

1

まず、DLLをテストして実行するためのVBS(VBスクリプト)プログラムを作成します。

set obj = CreateObject("test.application") 
MsgBox TypeName(obj) 

正常に実行されていることを確認してください。それが失敗したら、(64ビットOSと仮定して)c:\ windows \ syswow64 \ wscript.exe path \ to \ your \ script.vbsで実行してみてください。

Javaプロセスが64ビットプロセスか32ビットプロセスかを確認してください。あなたのC#DLLは、成功するためにはあなたのJavaプロセスと同じビット数で登録されなければなりません。

関連する問題