2011-09-14 13 views
3

Silverlight 5では、大きな特徴があります。それはP/Invoke(プラットフォーム呼び出し)です。この機能により、システムDLLから関数を呼び出すことができます。しかし、Silverlight用にコンパイルされていない「.NET DLL」を使用する必要があります。私はP/Invokeまたは他の方法でそれをどうやって行うことができますか? P.P.私のアプリケーションは "信頼できる" "ブラウザ内"のアプリケーションです。Silverlight 5とdll

更新: マイクのボタンとやりとりするための特定のライブラリがあります。通常の「.NET DLL」として.NETアプリケーションで使用します(つまり、クラスを参照してクラスを使用します)。私がP/Invokeについて知っていたとき、私はSilverlightアプリケーションでそれを使用しようと決心しましたが、私はP/Invokeを通してそれを行う方法を理解していませんでした。

答えて

1

私はあなたにフォローしていません。

あなたはどんな問題がありますか?

は、WindowsのAPIを呼び出すためのPInvokeを使用する場合は、例えば、このような何かを行うことができます。

using System; 
using System.Runtime.InteropServices; 


namespace MySilverlightApplication 
{ 
    public class PlatformInvokeTest 
    { 
     [DllImport("kernel32.dll")] 
     public static extern bool Beep(int frequency, int duration); 


     public static void PlaySound(int frequency, int duration) 
     { 
      Beep(frequency, duration); 
     } 
    } 
} 

あなたはSLプロジェクトまたはSLではない.NET DLL(アセンブリ)を持っている場合コントロールライブラリではPInvokeしようとする可能性がありますが、通常はWCFまたは他のチャネル経由でそのサービスを公開します。私はブラウザから外れていることを理解しています。切断された状態で作業したいと思うかもしれません...あなたの特定のニーズについてもっと教えてください。

はところで、ここで、この記事を参照してください:How to use PInvoke in Silverlight 5

+0

はい、素晴らしいです。しかし、それは私が望むものではありません。私は質問を更新しました。 – Ilya

3

をそれはあなたのシナリオの仕様に非常に依存します。完全な.NETコンポーネントを呼び出す唯一の方法は、COM経由です。 .NETコンポーネントがCOMに必要なAPIを公開している場合は、AutomationFactoryを使用して取得できます(これはSL4でも同様です)。

もしCOMにアクセス可能なAPIがなければ、元のdllの周りにCOMアクセス可能なクラスのセットを作成する独自のdllをインストールすることができます。または、問題のdllが自分のコードであれば、 COMにアクセスできます。もちろん、これはあなたがクライアントマシンに何かをインストールする立場にあると仮定します。

1

私はあなたと同様の問題を経験したと思います。 SilverlightアプリケーションXAPのリソースとしてネイティブDLLをバンドルして解決しました。アプリケーションを起動すると、アプリケーションをコンピュータのローカルディレクトリにコピーし、アプリケーションがインストールされている間にシステムディレクトリにローカルディレクトリを追加しますランニング。

私はこのブログの記事では、より広範囲に私の解決策を記載している:http://cureos.blogspot.com/2011/09/pinvoke-bundling-native-dlls-in.html

私はこれがあなたの問題を解決したいと考えています。がんばろう!

Anders @ Cureos

+0

すばらしいソリューション!すでに述べたように、Silverlight 5のRTMリリースでMicrosoftがネイティブDLLパスの問題を修正することを願っています。 – Mike

関連する問題