2

私はのComVisibleクラス作成しました:のSilverlight 4とCOM相互運用機能

[Guid("73a3f91f-baa9-46ab-94b8-e526c22054a4"), ComVisible(true)] 
public interface ITest 
{ 
    void Foo(); 
} 

[Guid("99f72d92-b302-4fde-89bb-2dac899f5a48"), ComVisible(true)] 
public class Class1 : ITest 
{ 
    public void Foo() { } 
} 

をし、レジストリに

regasm ComClassTest.dll /tlb:ComClassTest.tlb 

経由で登録。 私は外のブラウザ、このような高い信頼アプリケーションの私のSilverlight 4でそれを呼び出すようにしようとすると:私は例外を取得

var foo = AutomationFactory.CreateObject("ComClassTest.Class1"); 

「{のSystem.Exception:指定されたProgIDのためのオブジェクトインスタンスの作成に失敗しました"

ただし、例外なしでAutomationFactory.CreateObject( "Word.Application")を呼び出し、通常のC#-consoleアプリケーションでActivator.CreateInstance(Type.GetTypeFromProgID( "ComClassTest.Class1"))を呼び出すことができますif ComClassTest.dllをbinディレクトリにコピーします。

私は綿糸を何ですか?

答えて

0

最初に行うことは、VBScriptなどの別の場所からオブジェクトを作成できることをテストすることです。コンテンツに.vbsファイルを作成します -

o = CreateObject("ComClassTest.Class1") 

をそれがエラーを生成しない場合は、何かがあることは、特にそのSLのOOBは、そうでない場合は、あなたの問題は本当にすべてでSilverlightのために関連していないと怒っています。

COMコードを次のように変更することを検討してください。

  • 多くの場合、アセンブリレベルでComVisible(true)を指定する方が簡単です。これは、[アセンブリ情報]ダイアログのプロジェクトプロパティの[アプリケーション]タブから実行できます。また、Visual Studioを使用してアセンブリをCOMに登録し、プロジェクトプロパティの[ビルド]タブにあるオプションを使用してビルドすることもできます。

  • ComInterfaceTypeを公開することをお勧めします。

  • クラスインターフェイスを直接公開すると、通常、定義したインターフェイスだけを使用し、これがクラスの既定のインターフェイスになります。さらに、クラスのデフォルトインターフェイスのCOM命名規則に従うことをお勧めします。

  • 最後に(場合によってはあなたのケースでは)、クラスに使用するProgIdについて明示することをお勧めします。

上記を適用し、我々が得る: -

[InterfaceType(ComInterfaceType.InterfaceIsDual)] 
[Guid("73a3f91f-baa9-46ab-94b8-e526c22054a4")] 
public interface _Class1 
{ 
    void Foo(); 
} 

[ClassInterface(ClassInterfaceType.None)] 
[Guid("99f72d92-b302-4fde-89bb-2dac899f5a48")] 
[ProgId("ComClassTest.Class1")] 
public class Class1 : _Class1 
{ 
    public void Foo() { } 
} 
+0

を私はすべてのご提案を行ってきたが、例外はまだ同じです。上で述べたように、私はアセンブリをC#-consoleアプリケーションから呼び出すことができます。それはSilverlightの問題であることを証明していませんか? –

+0

@Papa:C#コンソールアプリケーションは、Silverlightコードが使用しようとしている 'IDispatch' OLEオートメーションインターフェイスを使用していません。私の答えは、VBScriptの1行で成功していますか? – AnthonyWJones

+0

同じ問題があるIm。あなたのVBスクリプトをテスト(ビン/デバッグ/ DLLプロジェクトの)実行されますが、それは私を与える:行1、char 1:システムが指定されたファイルを見つけることができません。 Papaによって記述されたActivatorを使ったC#コンソールアプリはうまく動作します。私はアセンブリレベルでComVisibleを持っています。 – gauteh

関連する問題