0

C#アプリでいくつかのCOMオブジェクトを使用しようとしています。

1番目のバリアント:

using AXVLC;

Type t = Type.
           GetTypeFromCLSID(
           Guid.Parse("E23FE9C6-778E-49D4-B537-38FCDE4887D8")
           );

AXVLC.VLCPluginClass vid = Activator.CreateInstance(t) as VLCPluginClass;

しかし、そのようなエラーが発生します: 相互運用タイプ'AXVLC.VLCPluginClass'を埋め込むことはできません。代わりに、該当するインターフェースを使用してください。ComObjectCalls

COMオブジェクトがパブリックコンストラクターを公開しないことを理解したので、オブジェクトを使用する他の手段を見つける必要があります。多くの場合、COMオブジェクトはファクトリモデルを使用してオブジェクトのインスタンスを作成します(例:IClass instance = COMClass.CreateInstance();)

または、Activator.CreateInstance()を使用してみてください

また、COMオブジェクトについて別の質問があります。-動的タイプを使用しています。dynamicshell = AutomationFactory.CreateObject( "WMPlayer.OCX.7");

作成します-わかりました。しかし、どのように知られるか、私がそれに使用できる方法。どうすればキャストできますか?

主な問題は、Silverlightアプリケーションを使用してCOMオブジェクトにアクセスしたいということです。したがって、動的/ expondoオブジェクトを操作したり、P/Invokeを使用してSilverlightのネイティブライブラリを呼び出したりする方法があります。

[DllImport("user32.dll", CharSet = CharSet.Auto, EntryPoint = "MessageBox")]
public static extern IntPtr MineMessageBox(int hWnd, string text,
string caption, uint type);

...
MineMessageBox(0, "Hello World", "Platform Invoke Sample", 0);

SilverlightのCOMオブジェクト機能にアクセスするための最良の方法は何ですか。また、ランタイムでこのCOMオブジェクトに関するすべての情報を取得することもできます(getメソッド。これを呼び出すことができます)。

ありがとうございました!

4

2 に答える 2

1

すべてのCOMオブジェクトはインターフェイスに準拠しています。これは、メソッドの出所です。

VLC ActiveXコントロールの場合、を使用する代わりに、を使用する可能性がありAXVLC.VLCPluginClassますAXVLC.VLCPluginApplicationこれは、の代わりにを使用するOfficeの相互運用機能に似ていApplicationClassます。

を使用する2番目の例dynamicでは、IntelliSenseを機能させるためのハッキーな方法は、からCreateObjectインターフェイスにリターンをキャストすることです。ただし、ビルドする前に削除することを忘れないでください。そうしないと、実行時にキャストが失敗します。

別の(そしてより良い方法)は、そのCOMオブジェクトのドキュメントを単純に処理することです。

于 2012-12-19T10:56:26.087 に答える
1

AutomationFactoryクラスとキーワードを使用しますdynamic(.net 4.0 / sl 4.0最小)。

于 2013-01-07T23:05:44.543 に答える